![]() |
StrLen / SizeOf mag Chr(0) nicht?
Morgen,
versuche gerade die Länge eines Strings, welcher auch ein paar "Chr(0);" enthält ,zu ermitteln. Egal welche kt. ich benutze StrLen / SizeOf beides gibt in meinem Fall nur 8* an
Delphi-Quellcode:
Also "er zählt" nur das erste Wort vor dem Chr(0).
sOutput := 'armapath' + Chr(0) + sValue + Chr(0) + 'port' + Chr(0) + IntToStr(iPort) + Chr(0) + Chr(0);
// Dies ist nur ein Beispielstring der Aufbau des Orginals ist jedoch der gleiche (keyword-chr(0)-value-chr(0)-usw.-Chr(0)-Chr(0) (double chr(0) = EOL)) Gibt es eine möglichkeit diese mit zu zählen? LG Toby // Eine möglichkeit wäre, alle vorhandenen Wörter zu zählen und einfach die Chr(0) mit +1 zu addieren, halte dies aber für "unsauber" und nicht redunant, anything else? // Chr(0); ist nur ein Trenner, da ich diese Daten durch nen Socket schiebe und ich die auf der Gegenstelle weiter verarbeite habe ich mir diesen Trenner so angewöhnt. |
Re: StrLen / SizeOf mag Chr(0) nicht?
Ist aber auch gleichzeitig ein Kenner für Stringende
|
Re: StrLen / SizeOf mag Chr(0) nicht?
Naja, dessen bin ich mir bewusst.
Beantwortet aber trotzdem nicht meine Antwort, trotzdem Danke. LG Toby |
Re: StrLen / SizeOf mag Chr(0) nicht?
Nimm doch einfach einen anderen Trenner
|
Re: StrLen / SizeOf mag Chr(0) nicht?
Welcher wäre "frei"?
// : ; . - usw. gehen nicht, da alle Sonderzeichen möglich wären. Deshalb ja 0x00 weil man des nunmal nicht "eingeben" kann :) |
Re: StrLen / SizeOf mag Chr(0) nicht?
Ein Zeichen, welches nicht in deinen Daten enthalten ist.
|
Re: StrLen / SizeOf mag Chr(0) nicht?
Hallo,
warum eigentlich nicht ![]() Gruß xaromz |
Re: StrLen / SizeOf mag Chr(0) nicht?
Hallo,
mit dem 0-Zeichen ist das so eine Sache. Eigentlich sollten Pascal-Strings alle Zeichen enthalten können, da sie ja eine Längeninformationen mit sich führen. Deshalb sollte auch die von xaromz angesprochene Funktion Length() in diesem Fall das richtige Ergebnis liefern. Allerdings würde ich mich nicht darauf verlassen, dass alle RTL-/VCL-Routinen die 0 richtig interpretieren:
Delphi-Quellcode:
Um allen Schwierigkeiten bei möglichen Konvertierungen aus dem Weg zu gehen, würde ich also auch zu einem anderen Trenner raten. In der Wikipedia findet man
var
s : string; n : Integer; v : Double; begin s := '123,456'#0'Hallo Welt'; n := Length(s); // liefert den Wert 18 v := StrToFloat(s); // sollte einen Fehler auslösen, tut das aber nicht... end; ![]() Gruß Hawkeye |
Re: StrLen / SizeOf mag Chr(0) nicht?
Warum nimmst du nicht als Trenner #1 oder #7 (Beep)?? Einen Beep hab ich bis jetzt noch nicht geschafft irgendwo einzugeben, gleiches ist mir auch mit Chr(1) wiederfahren. Dabei fällt das Problem mit der 0 weg, die als Ende fungiert. Eigentlich ist das etwas komisch, dass das nicht auf anhieb funkioniert. Nach einem ähnlichen Prinzip versteht sich auch der Open- und SaveDialog von Windows, wenn man ihn nonVCL aufruft. Dort signalisiert ein einfaches #0 ein Ende und ein doppeltes #0 ein Zeilenende.
Bernhard |
Re: StrLen / SizeOf mag Chr(0) nicht?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz