Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi CSV Import (https://www.delphipraxis.net/159746-csv-import.html)

MB3rlin 11. Apr 2011 12:21

CSV Import
 
hallo delphi-praxis community.
Ich möchte gernen einen CSV import selber schreiben ohne eine Komponente dazu verwenden. Ich hab hier im Forum und auch mit anderen Suchmaschinen gesucht, leider nichts passendes gefunden.
Der Import sollte in etwa so aussehen:
Ich wähle die csv Datei aus , setzte ein Haken ob die csv - Datei einen Kopf besitzt, wenn ja werden die Header informationen ausgelesen und in die entsprechenden Comboboxen geschrieben die ich verwende um die Spaten der CSV - Datei den DB - Spalten zuzuordnen. Wenn das erledigt wurde , werden die Daten in die DB geschrieben .
Danke für eure Mühe
MB3rlin

Klaus01 11. Apr 2011 12:23

AW: CSV Import
 
Hallo,

Du könntest Dir mal die TStringList und da speziell, Delimiter, DelimitedText
und StrictDelimiter anschauen.

Grüße
Klaus

DeddyH 11. Apr 2011 12:27

AW: CSV Import
 
Zitat:

Zitat von Klaus01 (Beitrag 1094383)
Hallo,

Du könntest Dir mal die TStringList und da speziell, Delimiter, DelimitedText
und StrictDelimiter anschauen.

Das kann aber auch nur der Anfang sein, da ja zumindest theoretisch das Trennzeichen auch in den Nutzdaten vorkommen kann. Gab es da nicht ein Tool oder eine Klasse von alzaimar (oder war es shmia? Ich bin gerade nicht sicher), das solche Dinge berücksichtigt?

Metallicwar 11. Apr 2011 12:32

AW: CSV Import
 
hallo, ich arbeite des Öfteren auch mit CSV Dateien:
vielleicht hilft dir mein Import ein bisschen weiter:

Delphi-Quellcode:
procedure TfrmMain.importFromCSVfile(sFile: string);
var
  tfDatei: TextFile;
  sZInhalt: string;
  slWerte: TStringList;
  iZeile: Integer;
begin
  TRY
    TRY
      AssignFile(tfDatei, sFile);
      Reset(tfDatei);
      iZeile:= 0;
      while not EoF(tfDatei) do
      begin
        slWerte := TStringList.Create;
        Readln(tfDatei,sZInhalt);
        slWerte.Delimiter := ';';
        slWerte.StrictDelimiter := True;
        slWerte.DelimitedText := sZInhalt;

        Inc(iZeile); // erste Zeile ist der Kopf

        if IZeile > 1 then // alles größer als Zeile eins sind Daten
          begin
            if slWerte.Strings[2] = '' then
              slWerte.Strings[2] := IntToStr(0);
              tTabelle.Open;
              tTabelle.Append;
              tTabelle['Spaltenname1'] := StrToInt(slWerte.Strings[0]);
              tTabelle['Spaltenname2'] := slWerte.Strings[2];
              tTabelle.Post;
          end;
      end;
    EXCEPT
      MessageDlg('Est ist ein Fehler aufgetreten, der Prozess wird beendet.',mtError, [mbOK], 0);
    END;
  FINALLY
    CloseFile(tfDatei);
    tTabelle.Close;
  END;
end;

Luckie 11. Apr 2011 12:37

AW: CSV Import
 
Zitat:

Zitat von MB3rlin (Beitrag 1094382)
hallo delphi-praxis community.
Ich möchte gernen einen CSV import selber schreiben ohne eine Komponente dazu verwenden. Ich hab hier im Forum und auch mit anderen Suchmaschinen gesucht, leider nichts passendes gefunden.

Das kann nicht sein. Wenn ich nach csv suche findest du meinen CSVBetrachter und der ist mit Quellcode.

MB3rlin 11. Apr 2011 12:42

AW: CSV Import
 
Danke erstmal für die schnellen Antworten ich werd es gleich mal ausprobieren :)

Aurelius 11. Apr 2011 14:20

AW: CSV Import
 
Hi MB3rlin,

solltest du dich dazu entscheiden den Import wirklich selbst schreiben zu wollen würde ich dir auf jeden Fall folgende Spezifikationen ans Herz legen: http://tools.ietf.org/html/rfc4180

Da ich selbst schonmal eine Klasse zur Verarbeitung von CSV-Dateien geschrieben habe (allerdings in einer anderen Programmiersprache ) kann ich aus eigener Erfahrung sagen: so schwer wie es vielleicht auf den ersten Blick aussieht ist das gar nicht! Also hab ruhig Mut und versuche dich an einer eigenen Implementation, bevor du bereits fertigen Code nutzt :thumb:

Thom 11. Apr 2011 16:52

AW: CSV Import
 
Zitat:

Zitat von DeddyH (Beitrag 1094385)
Das kann aber auch nur der Anfang sein, da ja zumindest theoretisch das Trennzeichen auch in den Nutzdaten vorkommen kann.

Gibt's dafür nicht die Eigenschaft QuoteChar? :gruebel:

MB3rlin 19. Apr 2011 15:38

AW: CSV Import
 
Danke für eure Hilfe , anhand der Beispiele von Metallicwar und Luckie hat es geklappt :)

A.Griffin 28. Aug 2017 11:45

AW: CSV Import
 
Ich weiß, dass hier wär ein wenig necro aber ich hätte noch eine Frage. Was für eine Klasse ist bei Metallicwar "tTabelle"?

himitsu 28. Aug 2017 11:49

AW: CSV Import
 
Ein DataSet.
z.B. Delphi-Referenz durchsuchenTDataSet, bzw. hier dessen Nachfahre Delphi-Referenz durchsuchenTTable.


PS: TTable + [F1] :zwinker:

A.Griffin 28. Aug 2017 11:58

AW: CSV Import
 
Komisch. Ich nutze gerade XE7 und habe weder TDataSet noch TTable in meiner Tool-Palette. Muss ich da was nachinstallieren?

*edit*

Ich habe gerade gesehen, dass ich dafür die BDE Components nachinstallieren muss.

himitsu 28. Aug 2017 12:27

AW: CSV Import
 
TDataSet sollte immer vorhanden sein.
Das ist der abstrakte Grundtyp, aber kann sein, dass der nicht in der ToolPalette drin ist, da er selber keinerlei Datenbank-Funktionalität enthält. (wie bei TStrings oder TStream)

Und dann gibt es massig Ableitungen der verschiedenen Komponentenhersteller und für verschiedene DBMS.

Neutral General 28. Aug 2017 12:47

AW: CSV Import
 
Auf der anderen Seite wenn du nichts mit Datenbanken am Hut hast, ist der Quellcode in der Form auch nicht wirklich hilfreich.
Nur so als Anmerkung.

A.Griffin 28. Aug 2017 13:22

AW: CSV Import
 
Ich möchte eine csv Datei in eine Tabelle importieren können, die Einträge in der Tabelle anzeigen & bearbeiten können und dann die Tabelle wieder als csv Datei speichern können.

Neutral General 28. Aug 2017 13:25

AW: CSV Import
 
Das wäre mit einem DBGrid und dem TDataset/TTable möglich.
Wenn du aber ein Dataset benutzt musst du zur Anzeige/Bearbeitung halt auch eine DB-Komponente benutzen.

Falls du da andere Pläne hast musst du wahrscheinlich etwas am Code ändern.

himitsu 28. Aug 2017 13:30

AW: CSV Import
 
TClientDataSet oder eine andere Memory-Table kannst du nutzen.
Daten im Arbeitsspeicher und keine Bindung an eine Datenbank.
Zur Anzeige und zum manuellen Bearbeiten einfach ein DBGrid anhängen. (oder DBEdits und einen DBNavigator)

Daten automatisch verarbeiten, ohne Anzeige, ginge mit 2 StringListen.
FileSL.Line[i] <-> LineSL.CommaText

uvm. ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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