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
 
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: csv Datei Import ClassHelper für TClientDataSet

  Alt 27. Okt 2011, 09:10
Geht das auch mit einer CSV-Datei der Form
Code:
Test;"Zeile 1 von Test
Zeile 2 von Test";Test
Daraus muss ein Record mit drei Feldern werden.
Nein, das geht nicht.
In csv Dateien bedeutet das Zeilenende in der Regel dass ein neuer Datensatz beginnt. Sprich: Es sind keine Zeilenunbrüche in Feldern erlaubt.

In meiner Implementierung kopiere ich jede einzelne Zeile in ein TStrings und hole dann die einzelnen Felder aus diesem heraus.
Mit meiner Methode geht das also auf keinen Fall.

Ich habe mir das ursprünglich geschrieben um bestimmte Log-Dateien auszuwerten.
Für die CodeLib habe ich dann noch SaveToFile ergänzt.

Meine Intention, das in die CodeLib zu stellen, war zu zeigen, dass es einen relativ einfachen Weg gibt csv Dateien zu importieren.

Letztendlich reicht schon folgender Quellcode aus um eine csv-Datei zu lesen und auf alle einzelnen Felder zuzugreifen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  slFile, slRow: TStringList;
  i, j: Integer;
begin
  slFile := TStringList.Create;
  slRow := TStringList.Create;
  slRow.Delimiter := ';';
  slRow.QuoteChar := '"';
  try
    slFile.LoadFromFile('dateiname.csv');
    for i := 0 to slFile.Count - 1 do
    begin
      slRow.DelimitedText := slFile[i]; // wandelt eine csv-Zeile um -> jedes Feld bekommt eine eigene Zeile in slRow
      for j := 0 to slRow.Count - 1 do
      begin
        Memo1.Lines.Add(Format('Row:%3d Col:%2d: Value:%s', [i, j, slRow[j]]));
      end;
    end;
  finally
    slFile.Free;
    slRow.Free;
  end;
end;
Das ist ein gutes Beispiel für KISS (keep it stupid simple).

Ich hoffe diese Info hilft Dir.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)

Geändert von MaBuSE (27. Okt 2011 um 09:27 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 12:41 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