![]() |
String mit Leerzeichen verursacht Chaos???
Hallo,
ich speichere wie folgt die Einträge einer ListBox in eine txt-Datei:
Delphi-Quellcode:
Befindet sich allerdings in einem der Einträge der ListBox ein Leerzeichen wird das nächstfolgende Wort nicht mehr z.B. dem s1-String zugewiesen, sondern dem s2. Im s2 dem s3. :roteyes: Wer weiß woran es liegt? :gruebel:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: Integer; s1,s2,s3,s4: String; List: TStringList; begin List:=TStringList.Create; try for i:=0 to ListBox1.Count-1 do begin s1:=ListBox1.Items.Strings[i]; s2:=ListBox2.Items.Strings[i]; s3:=ListBox3.Items.Strings[i]; s4:=ListBox4.Items.Strings[i]; List.Add('=' + s1 + '=' + s2 + '=' + s3 + '=' + s4 + '='); end; List.SaveToFile(ExtractFilePath(ParamStr(0)) + '\Datei.txt'); finally List.Free; end; end; |
Re: String mit Leerzeichen verursacht Chaos???
Leerzeichen werden standardmässig als weiteres trennzeichen erkannt. mit
Delphi-Quellcode:
kann man das verhindern
StringList.StrictDelimiter := True;
|
Re: String mit Leerzeichen verursacht Chaos???
Bekomme die Fehlermeldung: Undefinierter Bezeichner: 'StrictDelimiter' :gruebel:
|
Re: String mit Leerzeichen verursacht Chaos???
Dann scheinst du eine etwas alte Delphiversion zu haben
|
Re: String mit Leerzeichen verursacht Chaos???
Oh das stimmt, mit Delphi 2006 geht's. Und wie löse ich das Problem? Muss unbedingt bei Delphi 7PE bleiben. :gruebel:
Kann ich die Items der ListBox irgendwie anders abspeichern? |
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Ja
|
Re: String mit Leerzeichen verursacht Chaos???
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
Daniiieeeeel set das untere Limit für Beitragslängen mal auf mindestens zwanzig Zeichen *G* [/OT] |
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
Alsoe ien Anti-mkinzler Modifikation, welche er sich dann patentieren lassen kann. :stupid: |
Re: String mit Leerzeichen verursacht Chaos???
mkinzler gib mir bitte nen Tipp wie ich das machen soll, bin schon zwei Tage dran und hab keine Kraft mehr :pale:
Hab mit "ValueFrom Index" versucht, aber da wird immer das erste Zeichen des Strings abgeschnitten. :wall: |
Re: String mit Leerzeichen verursacht Chaos???
So sollte es gehen:
Delphi-Quellcode:
getippt und nicht getestet
...
var tf: textFile; ... AssignFile( tf, ExtractFilePath(ParamStr(0)) + '\Datei.txt'); Reswrite( tf); for i:=0 to ListBox1.Count-1 do begin s1:=ListBox1.Items.Strings[i]; s2:=ListBox2.Items.Strings[i]; s3:=ListBox3.Items.Strings[i]; s4:=ListBox4.Items.Strings[i]; WriteLn( tf, '=' + s1 + '=' + s2 + '=' + s3 + '=' + s4 + '='); end; ... |
Re: String mit Leerzeichen verursacht Chaos???
Aber ich will doch die ListBox.Items in eine txt-Datei speichern. Die Datei.txt hat ja hier nix zu suchen, erst ganz unten wird sie erstellt. :gruebel:
|
Re: String mit Leerzeichen verursacht Chaos???
Dann sollte es mit ListBox1.Items.SavetoFile() gehen
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
Er muss ja zeilenweise speichern, und nicht erst alles am Ende, weil er keine StringList als Puffer nimmt. |
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Schlieest du die Datei auch (
Delphi-Quellcode:
)?
CloseFile( tf);
|
Re: String mit Leerzeichen verursacht Chaos???
Ich hab das Problem wo anders gefunden, die Strings werden doch richtig und mit Leerzeichen gespeichert, geladen werden sie falsch und ich dachte sie wurden falsch abgespeichert, verzeiht. Hier werden die Strings mit den Leerzeichen durcheinander gebracht:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer; List : TStringList; List2: TStringList; begin List:=TStringList.Create; List2:=TStringList.Create; List2.Delimiter:='='; try List.LoadFromFile(ExtractFilePath(ParamStr(0)) + '\Datei.txt'); for i:=0 to List.Count-1 do begin List2.DelimitedText:=List[i]; ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); end; finally List.Free; List2.Free; end; end; |
Re: String mit Leerzeichen verursacht Chaos???
In diesem Fall könntest du die Leerzeichen durch ein anderes Zeichen (welches im text natürlich nicht vorkommen darf) ersetzen. Später durch die Einträge durchgehen und zurückersetzen
|
Re: String mit Leerzeichen verursacht Chaos???
Das hatte ich auch vor :-D aber ich gucke mal, vllt beseitige ich das Problem anders.
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
|
Re: String mit Leerzeichen verursacht Chaos???
Hallo,
ich hatte mal für einen anderen Thread das explode so umgebaut das es eine StringList zurückgibt.
Delphi-Quellcode:
// Explode trennt S in die durch Separator getrennten Elemente auf. Wenn Limit
// > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element // die Restzeichenkette steht. function Explode(const Separator, S: string; Limit: Integer = 0): TStringList; var SepLen: Integer; F, P: PChar; Index: Integer; begin result := TStringList.Create; if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin Result.add(S); Exit; end; SepLen := Length(Separator); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); result.Add(copy(AnsiString(F),0,P-F)); inc(index,1); if P^ <> #0 then Inc(P, SepLen); end; end; Damit würde Dein Code dann so ausschauen:
Delphi-Quellcode:
Grüße
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer; List : TStringList; List2: TStringList; begin List:=TStringList.Create; try List.LoadFromFile(ExtractFilePath(ParamStr(0)) + '\Datei.txt'); for i:=0 to List.Count-1 do begin List2:=explode('=',List[i]); ListBox1.Items.Insert(i, List2[1]); ListBox2.Items.Insert(i, List2[2]); ListBox3.Items.Insert(i, List2[3]); ListBox4.Items.Insert(i, List2[4]); List2.free; end; finally List.Free; end; end; Klaus |
Re: String mit Leerzeichen verursacht Chaos???
Wow es klappt, aber wieso wird die List2 in der Schleife freigegeben, ist das richtig so? :gruebel:
|
Re: String mit Leerzeichen verursacht Chaos???
Zitat:
Grüße Klaus |
Re: String mit Leerzeichen verursacht Chaos???
Ah... jah... ok, danke dir :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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-2025 by Thomas Breitkreuz