![]() |
Zeilenumbruch CSV
Hallo,
Ich habe wie bereits schon in einem anderen Tread erwähnt eine CSV Datei. (Ich bevorzuge hierfür ein neues Thema, da es sich um etwas gennerelles handelt) In dieser Datei befinden sich verschiedene Arten von Zeilenumsprünge. Eine Art würde ich gerne entfernen. Hmm, wie soll ich das nun beschreiben. Also wenn ich die Datei im TxT-Editor öffne dann sehe ich einmal die Zeilensprünge (normal einfach als Sprung) und dann als Quadrat. Ich gehe davon aus, dass es ein anderer Standart ist und nicht erkannt wird. Aber genau diese möchte ich löschen. wie kann ich das tun ohne mir die Formatierung zu versauen (also kein Zwangssprung bei 1024 Zeichen) MfG Benny |
Re: Zeilenumbruch CSV
Nimm einen Hex-Editor (Forumsuche) und sag uns, welche Zeichen du meinst.
Verlass dich nicht auf die Delphi IDE oder einen 08/15 Editor wie Notepad. Ein "normaler" Zeilenumbruch (Carriage-Return/Linefeed) ist in der PC-Welt das ASCII-Zeichen $0D gefolgt von $0A. |
Re: Zeilenumbruch CSV
Zitat:
Aber ich bin mir da nicht so sicher! MfG Benny |
Re: Zeilenumbruch CSV
Das hätte ich auch direkt vermutet. Eine Möglichkeit wäre, die ganze Datei als Textdatei in einen Editor zu laden und sofort wieder zu speichern; die meisten Editoren verwandeln dabei automatisch LF in CR/LF (und lassen CR/LF unverändert). Das müsstest Du ausprobieren.
Du könntest natürlich auch mit Suchen/Ersetzen arbeiten. Das wird aber eher umständlicher, weil Du nicht so einfach LF entfernen und CR/LF stehen lassen könntest. (Es geht natürlich, aber...) Jürgen |
Re: Zeilenumbruch CSV
Zitat:
Nun verstehe ich nur noch Bahnhof! Was ist CR und LF und kann ich nicht irgendwie einfach die LF's ohne CR löschen? Denn Ich kann die einzelnden wirklich nicht gebrauchen! Man ist das kompliziert! MfG Benny |
Re: Zeilenumbruch CSV
OK, anders gefragt wie kann ich meine Datei splitten in die CR/LF ?
Also einfach die Daten in Einen String bzw Array. Somit hätte ich ja manuell die Zeile bestimmt und könnte das in ein Memo laden bzw die allein stehenden LF löschen! Kann mir jemand vielleicht eine Funktion oder so liefern? :thumb: Gruß Benny |
Re: Zeilenumbruch CSV
Also gut, wir putzen die Datei mit Delphi.
CleanDatei löscht alle $0A, die kein vorhergehendes $0D haben. Man könnte auch von die $0A ein $0D einfügen, aber das ist anscheinend nicht gewünscht.
Delphi-Quellcode:
function FileToString(const FileName: string): AnsiString;
var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Len := fs.Size; SetLength(Result, Len); if Len > 0 then fs.ReadBuffer(Result[1], Len); finally fs.Free; end; end; procedure StringToFile(const FileName: string; const Contents: AnsiString); var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmCreate); try Len := Length(Contents); if Len > 0 then fs.WriteBuffer(Contents[1], Len); finally fs.Free; end; end; procedure CleanDatei(const filename:string); var s : string; i : integer; begin s := FileToString(filename); i := 1; while i <= length(s) do begin // Wenn aktuelles Zeichen eine Linefeed ist // aber der Vorgänger kein Carriage-Return war if (s[i] = #$0A) and (i=1 or ((i>1) and (s[i-1]<>#$0D))) then Delete(s, i, 1) // Zeichen löschen else Inc(i); // weiter zum nächsten Zeichen end; RenameFile(filename, filename+'.BAK'); StringToFile(filename, s); end; |
Re: Zeilenumbruch CSV
Hi,
Supi ich probiers gleich mal aus! :love: Nein ich möchte es löschen nicht voranstellen :D Gruß Benny |
Re: Zeilenumbruch CSV
Hmm leider ein Fehler in der Zeile:
Delphi-Quellcode:
Meldung: Operator ist auf diesen Operantentyp nicht anwendbar. :(
if (s[iz] = #$0A) and (iz=1 or ((iz>1) and (s[iz-1]<>#$0D))) then
Und an was liegt es? Gruß Benny |
Re: Zeilenumbruch CSV
Versuche es einmal so:
Delphi-Quellcode:
Grüße
if (s[iz] = chr($0A)) and (iz=1 or ((iz>1) and (s[iz-1]<>chr($0D)))) then
Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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