Entwickler-Ecke

Sonstiges (Delphi) - String aus einer Textdatei


Mortal-Shadow - Di 14.07.09 18:00
Titel: String aus einer Textdatei
Hi,

ich habe eine Textdatei, in der der Zeilenumbruch im Windows-Texteditor nicht dargestellt wird.
Das Umbruchzeichen hierbei ist $0D.
Ich wollte das schnell mit einem Programm unschreiben, was seltsamerweise nicht funktioniert hat.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
AssignFile(Datei,PFAD);
AssignFile(Neu,PFAD2);
Reset(Datei); // var Datei : File
Rewrite(Neu); // var Neu : Text
line := '';  // String
While not EoF(Datei) do
begin
BlockRead(Datei,ch,1);
If (Integer(ch) = $0Dthen
    begin
    Writeln(Neu, line);
    line := '';
    end
else
    begin
    line := line + ch;
    end;

Es verfälscht die Ausgabe komplett.
Aber was habe ich falsch gemacht?


Narses - Di 14.07.09 18:26

Moin!

Lies die Datei einfach in eine TStringList ein und schreib sie wieder, das sollte es tun. ;)

cu
Narses


FinnO - Di 14.07.09 18:29

wie wäre es mit


Delphi-Quelltext
1:
2:
3:
4:
memo1.Lines.LoadFromFile('Datei.txt');
for i := 1 to Length(Memo1.Text) do 
  if  ord(Memo1.Text[i] = $0D then
    Memo1.Text := copy(Memo1.Text,1,i) + #10#13 + copy(Memo1.Text,i+2,length(memo1.Text)-i+2); //ungefähr sollte das von den Zahlen her passen ;)

ungetestet

€: Da war wer schneller :(


Mortal-Shadow - Di 14.07.09 19:08

So,
das mit der Stringlist funktioniert.
Mich interessiert aber, wieso Teil 1 meines Programmes fehlgeschlagen hat.
Denn ich sehe da keinen Fehler - dennoch kamen (scheinbar) zufällige Zeichen in die neue Textfile.
Zitat:
gaaaya=of=a
g h o"l3ete
ln5 crlu=Vte
lnA cBnl\sMri3on ESFneeeeeeeeeeee iulu=Etn

Um nur die ersten paar Zeilen zu kopieren...


FinnO - Di 14.07.09 20:02

eventuell mit dem falschen ASCII-Zeichensatz geöffnet (also nicht "westlich")


TomasB - Di 14.07.09 20:34

Ich könnt' mich ja täuschen, aber ich meine mich zu erinnern, daß Blockread immer 128 Bytes auf einmal liest, wenn die Datei nur mit Reset(Dateiname) geöffnet wurde. Zum zeichenweisen Lesen mein ich müsste man die Datei mit Reset(Dateiname,1) öffnen.

gruß
Tomas

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Mortal-Shadow - Di 14.07.09 22:03

Perfekt, das wars - danke.