![]() |
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 |
AW: CSV Import
Hallo,
Du könntest Dir mal die TStringList und da speziell, Delimiter, DelimitedText und StrictDelimiter anschauen. Grüße Klaus |
AW: CSV Import
Zitat:
|
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; |
AW: CSV Import
Zitat:
|
AW: CSV Import
Danke erstmal für die schnellen Antworten ich werd es gleich mal ausprobieren :)
|
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: ![]() 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: |
AW: CSV Import
Zitat:
|
AW: CSV Import
Danke für eure Hilfe , anhand der Beispiele von Metallicwar und Luckie hat es geklappt :)
|
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"?
|
AW: CSV Import
|
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. |
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. |
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. |
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.
|
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. |
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