AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi csv Datei Import ClassHelper für TClientDataSet
Thema durchsuchen
Ansicht
Themen-Optionen

csv Datei Import ClassHelper für TClientDataSet

Ein Thema von MaBuSE · begonnen am 26. Okt 2011 · letzter Beitrag vom 24. Mai 2019
 
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#26

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 21. Mai 2019, 20:49
@Schokohase
Ich bin ja froh das deine Datei auch nicht die Anforderung erfüllt
Zitat von Schokohase:
Meine Testdaten
Delphi-Quellcode:
'a;b;c;d' + sLineBreak +
'a;"b;b";"c'#10'c";d'
mit dieser Version wird aber auch deine Datei eingelesen
Delphi-Quellcode:
procedure TClientDataSetCsvClassHelper.LoadFromFile;
var
  myString :Variant;
  slFile :TStringList;
  slRow :TStringList;
  x,i,j :Integer;
  myPos :Integer;
  myFields :Integer;
  cntFields :Integer;
begin
  slFile := TStringList.Create;
  slRow := TStringList.Create;
  try
    myPos := 0;
    slRow.Delimiter := Delimiter;
    slRow.QuoteChar := QuoteChar;
    slRow.StrictDelimiter := True;
    slFile.StrictDelimiter := True;
    slFile.LoadFromFile( Filename );

      // ClientDataset Initialisieren
    if slFile.Count > 0 then
    begin
      Active := False;
      for x := 0 to slFile.Count - 1 do
      begin
        myString := '';
        if (x = 0) then
        begin
          myPos := x;
            // Build Header for DS
          slRow.DelimitedText := slFile[0];
          if FirstLineTitle then myFields := slRow.Count else
           begin
           if (length( slFile[0] )-
              length( stringreplace( slFile[0], QuoteChar,'',[rfreplaceall, rfIgnoreCase])) mod 2 = 0) then
           myFields := length( slFile[0] )-
              length( stringreplace( slFile[0], Delimiter,'',[rfreplaceall, rfIgnoreCase]))
           else myFields := slRow.Count;
          FieldDefs.Clear;
          for i := 0 to myFields - 1 do
            begin
              FieldDefs.Add( Format( 'Field%d',[i]), ftWideString, StringLength );
            end;
          end;
          if FirstLineTitle then
          begin
          for i := 0 to myFields - 1 do
              FieldDefs.Add( slRow[i], ftWideString, StringLength );
          end;
          CreateDataSet;
          Active := True;
          myString := slFile[myPos];
        end;
        begin
        if (x=0) and FirstLineTitle then inc( myPos );
        if myPos = slFile.Count then break;
        myString := slFile[myPos];
        cntFields := length( myString )-
              length( stringreplace( myString, Delimiter,'',[rfreplaceall, rfIgnoreCase]));
          while cntFields <= (myFields-1) do
          if FirstLineTitle and (cntFields < (myFields-1)) then
            begin
              inc( myPos );
              myString := myString+slFile[myPos];
              cntFields := length( myString )-
                length( stringreplace( myString, Delimiter,'',[rfreplaceall, rfIgnoreCase]));
            end
            else
            if not FirstLineTitle and (x <> 0) then
            begin
              inc( myPos );
              myString := slFile[myPos];
             if (length( myString )-
                length( stringreplace( myString, QuoteChar,'',[rfreplaceall, rfIgnoreCase])) mod 2 <> 0) then
                begin
                myString := slFile[myPos-1]+myString;
                cntFields := length( myString )-
                  length( stringreplace( myString, Delimiter,'',[rfreplaceall, rfIgnoreCase]));
                end
             else
                cntFields := length( myString )-
                  length( stringreplace( myString, Delimiter,'',[rfreplaceall, rfIgnoreCase]));
            end
            else break;
        end;
          // fill TClientDataset
        DisableControls;
        begin
          slRow.DelimitedText := myString;
          Append;
          for j := 0 to slRow.Count - 1 do
          begin
            Fields[j].AsString := slRow[j];
          end;
          Post;
        end;
        EnableControls;
        inc( myPos );
      end;
    end;
  finally
    slFile.Free;
    slRow.Free;
  end;
end;

Geändert von Blackpit (21. Mai 2019 um 21:30 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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