Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.819 Beiträge
 
Delphi 10.4 Sydney
 
#41

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 19. Mai 2019, 12:51
Mein Vorschlag ist es die Quote-Zeichen zu zählen, was immer passt.
Ich hatte da vor einiger Zeit mal einen class helper für TTextReader geschrieben, der das umsetzt:
Delphi-Quellcode:
type
  TTextReaderHelper = class helper for TTextReader
    function CharCount(const ALine: string; AChar: Char): Integer;
    procedure ReadQuotedLine(Target: TStrings);
  end;

function TTextReaderHelper.CharCount(const ALine: string; AChar: Char): Integer;
var
  C: Char;
begin
  result := 0;
  for C in ALine do begin
    if C = AChar then
      Inc(result);
  end;
end;

procedure TTextReaderHelper.ReadQuotedLine(Target: TStrings);
var
  line: string;
  line2: string;
  saveStrictDelimiter: Boolean;
begin
  line := ReadLine;
  if Odd(CharCount(line, Target.QuoteChar)) then begin
    { Eine ungerade Anzahl von Quotes bedeutet, daß der gequotete String mindestens einen Zeilenumbruch enthält.
      Wir hängen also die nachfolgenden Zeilen mit LineBreak an, bis eine weitere Zeile mit ungerader Anzahl
      Quotes kommt.
    }

    repeat
      line := line + sLineBreak;
      line2 := ReadLine;
      line := line + line2;
    until Odd(CharCount(line2, Target.QuoteChar));
  end;
  { Zeilenumrüche in line dürfen nicht in separate Einträge zerlegt werden! }
  saveStrictDelimiter := Target.StrictDelimiter;
  try
    Target.StrictDelimiter := True;
    Target.CommaText := line;
  finally
    Target.StrictDelimiter := saveStrictDelimiter;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat