Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem: Datei mit Zeilenumbruch (https://www.delphipraxis.net/99149-problem-datei-mit-zeilenumbruch.html)

qb-tim 7. Sep 2007 14:27


Problem: Datei mit Zeilenumbruch
 
Hi,

ich habe ein kleine Problem:

Eine Datei, die ich Zeile für Zeile auswerten will, lädt Delphi aber als eine gesamte Zeile ohne Zeilenumbrüchen. Ist es möglich die Datei richtig mit Zeilenumbrüchen zu laden, ohne die Datei verändern zu müssen?

Danke im Voraus,

TIM

PS: Im Notepad sehe ich, wie die Zeilenumbrüche als Kästchen interpretiert werden, aber in WordPad ist es richtig...

Christian Seehase 7. Sep 2007 14:30

Re: Problem: Datei mit Zeilenumbruch
 
Moin Tim,

wie versuchst Du denn die Datei zu laden?
Deiner Beschreibung nach, wird sie nur ein #10 als Zeilenendekennung enthalten, was allerdings beim Laden in eine TStringList automatisch korrigiert werden sollte.

qb-tim 7. Sep 2007 14:32

Re: Problem: Datei mit Zeilenumbruch
 
Delphi-Quellcode:
AssignFile(xy,'datei.abc');
Reset(xy);
ReadLn(xy, String1);

// etc...

CloseFile(xy);
Ich habe auch bemerkt, dass eine Stringlist die Zeilenumbrüche aufhebt, aber geht es nicht einfacher, Delphi auf diese Zeilenumbrüche abzustimmen?

Klaus01 7. Sep 2007 14:36

Re: Problem: Datei mit Zeilenumbruch
 
Nun, readLn sucht als Zeileende #10#13 und nicht nur #10.

Kommt die Datei von einem Linux/Unixsystem?
Wie wird die Datei übertragen. Wenn FTP dann sollte es im Ascii Format sein
dann geschieht die Anpassung der verschiedenen Zeilenendezeichen automatisch.
Sonst gibt es da auf den Linux/Unixsystemen noch ein Tool das nennt sich unix2dos.

Was spricht dagegen mit Stringlisten zu arbeiten?

Grüße
Klaus

qb-tim 7. Sep 2007 14:37

Re: Problem: Datei mit Zeilenumbruch
 
OK, ich habe es jetzt mit einer StringList gemacht:

Delphi-Quellcode:
sl := TStringList.Create;
sl.LoadFromFile('datei.abc');
for i := 0 to sl.Count - 1 do
begin
  // etc...
end;
sl.Free

Christian Seehase 7. Sep 2007 15:07

Re: Problem: Datei mit Zeilenumbruch
 
Moin Klaus,

Zitat:

Zitat von Klaus01
Nun, readLn sucht als Zeileende #10#13 und nicht nur #10.

Nein. Zeilenende ist #13#10 ;-)

Zitat:

Zitat von Klaus01
Was spricht dagegen mit Stringlisten zu arbeiten?

Ich denke, dass hängt auch von der Dateigrösse ab.
In manchen Fällen kann es durchaus erhebliche Performancegewinne geben, wenn Textdateien zeilenweise verarbeitet.

Klaus01 7. Sep 2007 17:46

Re: Problem: Datei mit Zeilenumbruch
 
Zitat:

Zitat von Christian Seehase
Moin Klaus,

Zitat:

Zitat von Klaus01
Nun, readLn sucht als Zeileende #10#13 und nicht nur #10.

Nein. Zeilenende ist #13#10 ;-)

Hallo Christian,

danke für den Hinweis, ich verwechsele das immer wieder. Sollte nicht sein.

Grüße
Klaus

Reinhard Kern 8. Sep 2007 08:40

Re: Problem: Datei mit Zeilenumbruch
 
Zitat:

Zitat von qb-tim
OK, ich habe es jetzt mit einer StringList gemacht:

Delphi-Quellcode:
sl := TStringList.Create;
sl.LoadFromFile('datei.abc');
for i := 0 to sl.Count - 1 do
begin
  // etc...
end;
sl.Free

Back to the roots: ich baue mir in so einem Fall ein ReadLn_Spezial (bzw. hole es aus dem Schrank, das Problem kommt ja öfter vor), das bereits beim Einlesen LF durch CR-LF ersetzt. So macht das auch Wordpad. VCL ist überflüssig.

Gruss Reinhard

Micha88 18. Dez 2011 16:10

AW: Problem: Datei mit Zeilenumbruch
 
Selbiges Problem habe ich nun auch zum ersten Mal.

Lese ich eine in Windows geschriebene Textdatei in eine StringList ein und gehe sie mit einer Schleife durch, kein Problem.

Gehe ich eine in Linux (denke ich) erstellte Textdatei (vielleicht auch durch PHP erstellt) durch, scheint "alles in einer Zeile" zu sein.
In Notepad sieht es etwa so aus:
aaa bbb ccc ddd
in WordPad so:
aaa
bbb
ccc
ddd


Wie geht man hier am besten vor?

p80286 18. Dez 2011 16:18

AW: Problem: Datei mit Zeilenumbruch
 
Wie wäre es #10 mit Hilfe von Posex in #13#10 zu ändern?

Gruß
K-H

Micha88 18. Dez 2011 16:22

AW: Problem: Datei mit Zeilenumbruch
 
Mhh..

Ich lese die Datei X (Textdatei) mit SJMmfFileReader.pas ein. Normalerweise sollte ich diese dann zeielnweise durchgehen können.
Es existiert nach dem Einlesen aber nur "eine Zeile" und diese enthält die ganze Datei. Das passiert nur mit Dateien, die offensichtlich unter Linux erstellt wurden.

Das Problem ist, wenn ich ganz simpel nach '#10' suche, wird nichts gefunden:

Delphi-Quellcode:
if Pos('#10', zeileninhalt) > 0  then
showmessage('vorhanden');

DeddyH 18. Dez 2011 16:39

AW: Problem: Datei mit Zeilenumbruch
 
Nicht
Zitat:

Delphi-Quellcode:
Pos('#10'...

sondern
Delphi-Quellcode:
Pos(#10...
, sonst wird ja nach dem String "#10" gesucht und nicht nach dem Zeichen mit ASCII-Code 10.

Furtbichler 18. Dez 2011 17:25

AW: Problem: Datei mit Zeilenumbruch
 
Mit #10 wird man nicht ganz so weit kommen, zumal in einem #13#10 (Windows Zeilenumbruch) auch das #10 vorkommt.

Luckie 18. Dez 2011 17:37

AW: Problem: Datei mit Zeilenumbruch
 
Ich glaube, es reicht auch schon, wenn man die Datei in eine Stringliste läd und wieder speichert.

DeddyH 18. Dez 2011 17:39

AW: Problem: Datei mit Zeilenumbruch
 
Delphi-Quellcode:
s := StringReplace(s, sLineBreak, #10, [rfReplaceAll]);
s := StringReplace(s, #10, sLineBreak, [rfReplaceAll]);
Nicht schön, sollte aber zuverlässig funktionieren (wenn auch nicht sonderlich performant).

Luckie 18. Dez 2011 18:03

AW: Problem: Datei mit Zeilenumbruch
 
Wie ich schon sagte, reicht das Laden und Speichern mit einer Stringliste.

himitsu 18. Dez 2011 18:38

AW: Problem: Datei mit Zeilenumbruch
 
Oder einen anderen Editor verwenden.
Notepad kann nunmal nicht mit Linux-#10 umgehn.

Wordpad und andere Editoren können es.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz