Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Okay, ich weiß jetzt woran es lag.
var s: String;
Es kam beim Einlesen ein leerer String raus, hat erst geklappt, wenn ich vorher
SetLength(s, 4);
gesetzt habe.
Ich dachte immer, String erzeugt automatisch einen String konstanter Länge (4), aber man muss sie doch erst mit SetLength() setzen...
Die 4 gibt lediglich die maximale Länge des Strings an, sehe ich das richtig?
//edit: roter...
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Hmm, das ist merkwürdig...
Es funktioniert zwar, aber es steht was ganz anderes in dem String, als es sollte :gruebel:
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Okay, danke.
Gut, jetzt habe ich das auch soweit verstanden wie es in der Code-Lib steht.
Eine Frage noch:
Wie sieht es mit Strings fester Länge aus, z.B. String ?
Irgendwie klappt das überhaupt nicht mit dem Einlesen, weder mit s noch mit s :gruebel:
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Ja das ist schon klar, aber bei einem statischen Array hat es auch so geklappt:
Stream.Read(s, c);
anstatt den Index des ersten Elements zu übergeben:
Stream.Read(s, c);
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Also ne andere Variante war, dass ich einen String konstanter Länge genommen habe:
var Stream: TFileStream; s: array of Char; c: Cardinal;
{...}
repeat
Stream.Read(c, 4); // Größe einlesen
Stream.Read(s, c); // String einlesen
ShowMessage(s);
until Stream.Position >= Stream.Size;
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Danke, das wars :thumb:
Hatte mich halt vorher noch nie so mit FileStream beschäftigt.
Danke!
:roll:
Forum: Object-Pascal / Delphi-Language
Delphi
by Martin K,
15. Aug 2007
Hallo,
ich habe mich mal intensiever mit TStream bzw. TFileStream und dem Einlesen von Dateien beschäftigt.
In den betreffenden Datein ist jeweils die Länge des Strings in 4 Byte angegeben und dann folgt der String.
usw.
Also habe ich mir folgenden Code geschrieben:
var Stream: TFileStream; s: String; c: Cardinal;
{...}