![]() |
Text (ASCII) Datei
Hallo,
ich möchte aus einer vorhandenen ASCII-Datei (durch Leerzeichen getrennt) die Zeilen rauslesen und einzelen Strings aus diesen Zeilen in eine neue Datei (durch Semikolon getrennt) schreiben (auch Zeilenweise). Gibt es eine elegantere Variante als mit readln, copy und writeln? Danke!! Reiner |
Re: Text (ASCII) Datei
Hi,
Herzlich Willkommen erst einmal in der Delphi-Praxis. Ja es gibt eine möglichkeit. Mit StringReplace kannst du ein altest zeichen und geben und durch ein neues ersetzen. PS: Ist allerdings nicht zeichen weise. MFG Christian18 |
Re: Text (ASCII) Datei
Hallo,
ich habe gerade mal eine kleine Routine programmiert die das für Dich erledigt.
Delphi-Quellcode:
Edit:
procedure TForm1.Button1Click(Sender: TObject);
var o : TOpenDialog; f1, f2 : TextFile; s1, s2 : String; s : TSaveDialog; begin o:=TOpenDialog.Create(self); s:=TSaveDialog.Create(self); if o.Execute then begin AssignFile(f1, o.FileName); Reset(f1); if s.Execute then begin AssignFile(f2, s.FileName); Rewrite(f2); while not Eof(f1) do begin Readln(f1, s1); s2:=StringReplace(s1, ' ', ';', [rfReplaceAll]); s:=TSaveDialog.Create(self); Writeln(f2, s2); end; CloseFile(f2); end; CloseFile(f1); end; s.Free; o.Free; end; Wenn du große Files konvertieren willst, dann würde ich noch empfehlen eine ProgressBar oder Gauge einzubauen, damit der Benutzer weiß, wielanger er nch warten muß, bis das programm fertig ist mit der ausführung. MFG Christian18 |
Re: Text (ASCII) Datei
Hallo Christian 18,
danke für die schnelle Antwort !! Bin begeistert! Das Problem ist, dass ich nur einzelne Strings aus der Datei benötige. Auch sind die verschieden viele Leerzeichen zwischen den Strings der Urdatei. Beispiel: Urdatei: 12 Meier 32456 Teststrasse 99999 München 1340.70 Neue Datei: 32456;Meier;Teststrasse;99999;München;1340.70 Ich hoffe, so wird es klarer. Die Dateien sind ca. 1MB groß. Reiner |
Re: Text (ASCII) Datei
Sind die vertauschten Positionen immer gleich?
Statt in einen String zuladen Stringlist verwenden, dann kannst du auf die einzelnen Teilstring indiziert zugreifen.
Delphi-Quellcode:
..
var .. sl1, sl2: TStrings; begin sl1 := TStringList.Create; sl2 := TStringList.Create; sl1.Delimiter := ' '; sl2.Delimiter := ';'; .. Readln(f1, s1); sl2.DelimitedText := ''; sl1.DelimitedText := s1; sl2.ValueFromIndex[0] := sl1.ValueFromIndex[2]; sl2.ValueFromIndex[1] := sl1.ValueFromIndex[1]; usw. |
Re: Text (ASCII) Datei
@mkinzler
Ja, die vertauschten Positionen sind immer gleich. Nur die Länge der Positionen sind verschieden. Reiner |
Re: Text (ASCII) Datei
Hallo @ all
Ich denke, hier könnte man auch einfach mit einem Stream arbeiten, der Zeichenweise nach einem " " sucht und es durch ein ";" ersetzt ... mfG Markus |
Re: Text (ASCII) Datei
Habe den Sourcecode ergänzt ( s.o)
|
Re: Text (ASCII) Datei
Danke für die super Antworten !!
Ein Problem habe ich aber noch: Was mache ich, wenn zwischen 2 versch. Strings manchmal kein Leerzeichen ist, z.B. 34567Kilianstr Ich brauche hier 34567;Kilianstr Kann oder muß ich hier die zählen und die Position angeben? Reiner |
Re: Text (ASCII) Datei
Zitat:
|
Re: Text (ASCII) Datei
@mkinzler
Hallo ich bräuchte nochmals Deine Hilfe: Es kommt bei der Ausführung der Zeile sl2.ValueFromIndex[0] := sl1.ValueFromIndex[2]; die Fehlermeldung "Listenindex überschreitet das Maximum(0)" Was kann ich hier tun? Danke!! |
Re: Text (ASCII) Datei
Kann es sein, daß sl2 nach dem create noch keinen String auf Indexposition 0 liegen hat?
sl2[0] := sl1.ValueFromIndex[2]; könnte vielleicht besser sein. Grüße Klaus |
Re: Text (ASCII) Datei
Ersetze die Zeile
Delphi-Quellcode:
durch
sl2.DelimitedText := '';
Delphi-Quellcode:
oder
sl2.DelimitedText := ';;;;;;';
benzutze
Delphi-Quellcode:
usw.
sl2.Add( sl1.ValueFromIndex[2]);
Problem liegt daran das durch das Setzen das Textes auf '' die Anzahl der Einträge der Stringliste auf 0 gesetzt wird. |
Re: Text (ASCII) Datei
Du kannst natürlich das Ganze auch vereinfachen auf die 2. Strinliste sl2 verzichten und den String s2 direkt setzten mit
Delphi-Quellcode:
s2 := sl1.ValueFromIndex[2] + ';'+sl1.ValueFromIndex[1]+';'+ ...
|
Re: Text (ASCII) Datei
Zitat:
Oder als Stadtname "Frankfurt am Main" etc... Der Urheber der "Urdatei" hat sich keine großen Gedanken über die weitere Verarbeitung gemacht :-( |
Re: Text (ASCII) Datei
@All
Der Urheber der "Urdatei" hat sich tatsächl. keine großen Gedanken gemacht. Ich muß jetzt aus der Exportdatei (Urdatei) eines alten Warenwirtschaftsprogrammes ein File erstellen, das die Datev-Buchhaltung als ASCII-Datei importieren kann. In der Exportdatei sind nur Leerzeichen als Trenner zugelassen (warum auch immer). Da aber manchmal zwischen zwei Felder kein Trennzeichen (Leerzeichen) ist, habe ich es doch mit readln,copy,writeln realisiert, da ich hier die Position und die Länge angeben kann. Es funktioniert soweit auch ganz gut. Ich kann somit auch die Problematiik von @Catbytes umgehen ('Am Bahnhof'). Besten Dank nochmals für die super Hilfe. Ich werde dem Forum treu bleiben. Reiner |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 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