Hi Borlox!
Der Befehl Explode sagt mir nichts - jedenfalls nicht im Zshg. mit Delphi.
Da ich grad mal Lust hatte, hab ich dein Problem soeben gelöst. Dabei verwende ich einen dynamischen Array in welchen ich Wort für Wort einlese. Hier erstmal eine mögliche Lösung zu deinem Problem:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| procedure TForm1.Button1Click(Sender: TObject); var woerter: array of string; infile: Textfile; pfad, zeile: string; i: integer; begin pfad := ExtractFilePath(Application.ExeName)+'test.txt'; AssignFile(infile, pfad); {$I-} reset(infile); while not eof(infile) do begin readln(infile, zeile); while (Length(zeile) > 0) do begin SetLength(woerter, Length(woerter)+1); if pos('|',zeile) = 0 then begin woerter[High(woerter)] := zeile; zeile := ''; end else begin woerter[High(woerter)] := copy(zeile, 1, pos('|', zeile)-1); Delete(zeile, 1, pos('|',zeile)); end; end; Next; end; {$I+} if IOResult <> 0 then Showmessage('Fehler aufgetreten!') else CloseFile(infile);
for i := 0 to High(woerter) do Showmessage(woerter[i]);
woerter := nil; // Speicher freigeben end; |
So... zunächst stelle ich den Datenkanal zwischen Dateivariable und externer Datei her. Daraufhin wird die Datei mittels Reset und while not eof.. Zeile für Zeile ausgelesen. Der Zeileninhalt einer jeden Zeile wird dabei zunächst in die Variable 'zeile' geschrieben und daraufhin wird dieser String geparsed. Für jedes neue Wort wird der Speicherbereich des dynamischen Arrays erhöht. So das ist prinzipiell alles.
Am Schluss sollte man immer noch die Variable eines dynamischen Arrays auf nil setzen.
Für deine speziellen Bedürfnisse musst du diese Prozedur wahrscheinlich noch etwas abändern. Steht in einer Zeile der Datei bspw. '||' werden zwei Leerwörter gespeichert. Wie gesagt, dass musst du eben an deine Bedürfnisse anpassen...
MfG
DelphiMan