Autor Beitrag
Mortal-Shadow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 14.07.09 18:00 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 14.07.09 18:29 
wie wäre es mit

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 14.07.09 20:02 
eventuell mit dem falschen ASCII-Zeichensatz geöffnet (also nicht "westlich")
TomasB
Hält's aus hier
Beiträge: 5

Win98SE
Delphi5 Standard
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 14.07.09 22:03 
Perfekt, das wars - danke.