Thema: Delphi Zeilenumbruch CSV

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Zeilenumbruch CSV

  Alt 27. Feb 2007, 19:27
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;
Andreas
  Mit Zitat antworten Zitat