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;