Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CSV Datei erstellen (https://www.delphipraxis.net/57696-csv-datei-erstellen.html)

AndiS75 25. Nov 2005 10:34


CSV Datei erstellen
 
Hallo erstmal,

bin neu hier im Forum und hab gleich mal eine Frage.
Ich möchte einen String in eine CSV Datei exportieren. Hier mal kurz mein Quellcode.

Delphi-Quellcode:

//GCSV wurde vorher als TStrings deklariert

GCSV.Text := 'Fahrzeugart;Interner Name;Angebotsart;Kategorie;Marke;Modell;Leistung;' +
                 'Hubraum;EZ;TUV;AU;Kmstand;Preis;Haendlerpreis;VHB;Sofortkaufpreis;Startpreis;' +
                 'Wiederbeschaffungswert;Mwst. ausweisbar;Mwstsatz;Arbeitskosten;Lackkosten;' +
                 'Ersatzteilkosten;Reparaturkosten;Anzeigedauer;Angebotsende/Enduhrzeit;' +
                 'Waehrung;Land;PLZ;Kraftstoff;Automatikgetriebe;Tueren;Farbe;Metallic;' +
                 'Unfallfahrzeug;Schadenbeschreibung;Vorschaden/Altschaden;Neufahrzeug;' +
                 'Jahresfahrzeug;Oldtimer;Taxi/Mietfahrzeug;Garantie;Info/Ausstattung;' +
                 'ABS;ESP;Allradantrieb;Anhaengerkuplung;Klimaanlage;Alufelgen;Lederausstattung;' +
                 'Sitzheizung;Wegfahrsperre;Navigationsystem;Zentralverriegelung;Tempomat;' +
                 'Serviceheft;Elektrostarter;Katalysator;Halbverkleidung;Vollverkleidung;' +
                 'Windschild;Topcase;EBS;Hydraulik;Intarder;Ladebordwand;Retarder;Schiebetuer;' +
                 'Trennwand;Vorfuehrfahrzeug;Kran;Tragkraft;Nutzlast;Gesamtgewicht;Hubhoehe;' +
                 'Bauhoehe;Betriebsstunden;Sitze;Schadstoff;Kabinenart;Achsen;Schlafplatz;TV;WC;' +
                 'Kompressor;Fronthydraulik;Frontheber;Kuehlanlage;Lueftfederung;Zentralschmierung;' +
                 'Standheizung;Kueche;Kraftstoffverbr.innerorts;Kraftstoffverbr.ausserorts;' +
                 'Kraftstoffverbr.ca. (im Durchschnitt);CO2-Emissionen kombiniert;' +
                 'Fahrzeughalter/Ansprechpartner Name;Fahrzeughalter/Ansprechpartner Vorname;' +
                 'Fahrzeughalter/Ansprechpartner Telefon;Fahrzeughalter/Ansprechpartner Mobil;' +
                 'Fahrzeughalter/Ansprechpartner E-Mail;Fahrzeughalter/Ansprechpartner Strasse Haus-                  Nr;' +
                 'Fahrzeughalter/Ansprechpartner Ort;Fahrzeughalter/Ansprechpartner PLZ;' +
                 'Fahrzeughalter/Ansprechpartner Land';



                 if CBMwSt.Text = 'n.ausweisbar' then
                 begin
                   hMwSTAus := '0';
                 end
                 else
                 begin
                   hMwSTAus := '1';
                 end;

                 if CBMwSt.Text = 'Deutschland' then
                 begin
                   hLand := 'D';
                 end;

                 if BesAutomatik.Checked then
                 begin
                   hAutoMa := '1';
                 end
                 else
                 begin
                   hAutoMa := '0';
                 end;

                 if CBMetallic.Checked then
                 begin
                   hMetallic := '1';
                 end
                 else
                 begin
                   hMetallic := '0';
                 end;

                 GCSV.Text := GCSV.Text + CBFzgArt.Text + ';' + EditGaNr.Text + ';' + 'restwert'
                 + ';' +
                 CBKateg.Text + ';' + CBMarke.Text + ';' + EditModell.Text + ';' + EditLeist.Text
                 + ';' +
                 EditHubraum.Text + ';' + '00/' + EditEZ.Text + ';' + '00/' + EditTUEV.Text + ';' +
                 '00/' + EditTUEV.Text + ';' + EditKM.Text + ';' + '0' + ';' + ';' + '0' + ';' +
                 '0' + ';' + '0' + ';' + '0' + ';' + EditWieder.Text + ';' + hMwSTAus + ';' +
                 CBMwStSatz.Text + ';' + EditLohn.Text + ';' + EditLack.Text + ';' + EditErsatz.Text
                 + ';' +
                 EditGesamt.Text + ';' + CBAnzDauer.Text + ';' + CBAnzEnde.Text + ';' + CBWaehr.Text
                 + ';' +
                 CBOrtPlz.Text + ';' + hLand + ';' + EditPlz.Text + ';' + CBKraftStoff.Text + ';' +
                 hAutoMa + ';' + EditTueren.Text + ';' + CBFarbe.Text + ';' + hMetallic + ';' + ''
                 + ';' +
                 MemoUnfall.Text + ';' + MemoVorSchaden.Text + ';';
   
    //SDCSV SaveDialog

    with SDCSV do
    begin
      Filter := 'CSV Dateien (*.csv)|*.csv';
      FileName := EditGaNr.Text;
      DefaultExt := 'csv';
      Options := [ofOverwritePrompt];

      if Execute then GCSV.SaveToFile(FileName);
Das Problem ist nun, dass die Datei erstellt wird aber nicht korrekt dargestellt wird. Wenn ich die CSV Datei mit dem Editor öffne, werden die Datenfelder und die Werte korrekt dargestellt. Öffne ich die CSV Datei aber mit Excel, stimmen die Feldern und Werte nicht mehr überein.

Gruß

Andreas

Luckie 25. Nov 2005 10:36

Re: CSV Datei erstellen
 
Was gibst du denn bei Excel als Trennzeichen an bzw. was ist voreinegstellt? Und was heißt "stimmen die Feldern und Werte nicht mehr überein"?

Aenogym 25. Nov 2005 10:38

Re: CSV Datei erstellen
 
inwiefern stimmen die daten nicht mit den feldern überein?
wenn die CSV im editor richtig angezeigt wird, dann hat wohl dien excel ein problem oder so ;)

aenogym

AndiS75 25. Nov 2005 10:49

Re: CSV Datei erstellen
 
Das weiss ich eben nicht ob das Problem bei Excel liegt oder bei mir. Ich habe eine CSV Datei als Vorlage. Dort wird in A1 die Datenfelder angegeben und in A2 die Werte zu den Feldern. Trennzeichen ist Semikolon.
Bei meiner Datei werden in A1 die Datenfelder angegeben und in A2, B2, C2 usw. Wenn ich die erstellte CSV Datei im Editor öffne passt alles. Deshalb bin ich ein bischen verwirrt.

Aenogym 25. Nov 2005 10:53

Re: CSV Datei erstellen
 
also hast möchtest du eine vertikale tabelle, dein delphiprogramm macht aber eine horizontale tabelle.

deine CSV-Datei sieht jetzt quasi so aus:

Code:
Feld1;Feld2;Feld3
Wert11;Wert12;Wert13
Wert21;Wert22;Wert23
damit du in excel aber das gewünschte aussehen bekommst, muss deine CSV-datei folgendermaßen aussehen:

Code:
Feld1;Wert11;Wert21
Feld2;Wert12;Wert22
Feld3;Wert13;Wert23
aenogym

AndiS75 25. Nov 2005 11:01

Re: CSV Datei erstellen
 
so sollte es sein(laut Vorlage!)
Delphi-Quellcode:
A1 = Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
A2 = Opel; 155555; Gelb; 12345; S-H 152;
und so ist es
Delphi-Quellcode:
A1 = Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
A2 = Opel; 155555; B2=Gelb; 12345; C2= S-H 152;
A,B,C beziehen sich auf die Excel Felder. Wie gesagt im Editor wird es korrekt angezeigt.

Also

Delphi-Quellcode:
Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen
Opel; 155555; Gelb; 12345; S-H 152;
Hintergrund : Es soll eine Schnittstelle werden. Die Daten werden im CSV Format übertragen!

Aenogym 25. Nov 2005 11:21

Re: CSV Datei erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hm,

also das semikolon trennt doch die einzelnen Zellen voneinander. deswegen kann ich es mir nicht erklären, wieso excel das bei dir so anzeigt.

im anhang siehst du, wie excel mir folgende CSV-datei anzeigt.
Code:
Fahrzeug; Kilometerstand; Farbe; Nummer; Kennzeichen;
Opel; 155555; Gelb; 12345; S-H 152;

AndiS75 25. Nov 2005 11:45

Re: CSV Datei erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
die Datei soll nicht in Excel importiert werden, sonder über eine Webschnitstelle. Ich muss die Datei im CSV Format übergeben.
Vorlage wie es aussehen sollte ist im Anhang.

Aenogym 25. Nov 2005 12:01

Re: CSV Datei erstellen
 
hm in deinem code aus dem ersten beitrag sehe ich nirgends, dass du einen zeilenumbruch einfügst.
demnach würde sämtliche werte nacheinander in der textdatei stehen. und dann hast du den effekt, dass sich alle über eine zeile erstreckt.

Hansa 25. Nov 2005 12:25

Re: CSV Datei erstellen
 
So was :

Delphi-Quellcode:
if CBMwSt.Text = 'n.ausweisbar' then
ist sehr gefährlich. Was soll das machen, bzw. warum ein String-Vergleich ? Die Daten sollen geschrieben werden, oder ? Die Knackpunkte wurden allerdings bereits genannt : Trennzeichen und Zeilenende. Der Savedialog verkompliziert die Sache sowieso. Schreibe doch besser zeilenweise.

alzaimar 25. Nov 2005 12:41

Re: CSV Datei erstellen
 
Strings müssen beim CSV Format in '"' eingeschlossen werden:
Code:
"Ein String";234;OderSo;"Aber so kann man auch Sonderzeichen ;;;;=";"darstellen"

Luckie 25. Nov 2005 12:46

Re: CSV Datei erstellen
 
Zitat:

Zitat von Hansa
Der Savedialog verkompliziert die Sache sowieso. Schreibe doch besser zeilenweise.

Manchmal sagst du schon lustige Sachen. ;) Der Dialog stllt doch nur einen Dateinamen bereit, was macht das komplizierter?

AndiS75 29. Nov 2005 09:17

Re: CSV Datei erstellen
 
wieso zeilenumbruch? wenn ich die .csv datei über den editor öffne, passt ja alles? hat jemand einen alternativvorschlag für meinen quellcode.
laut der vorlage die ich erhalten habe, sind die strings auch nicht in "" eingeschlossen. trennzeichen sind semikolon , alles was dazwischen steht wird als string interpretiert!so zumindest steht es in der doku die ich erhalten habe.

alzaimar 29. Nov 2005 09:38

Re: CSV Datei erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von AndiS75
laut der vorlage die ich erhalten habe, sind die strings auch nicht in "" eingeschlossen. trennzeichen sind semikolon , alles was dazwischen steht wird als string interpretiert!so zumindest steht es in der doku die ich erhalten habe.

Hmmm... Merkwürdig. Ich geb Dir einfach mal mein CSV-Exporter: Die Klasse TCSVExcel sollte Dir helfen. Wenn nicht hab ich Mist gebaut, oder es ist was auf der Gegenseite faul (viele Leute kapieren CSV nicht, obwohl es einfach ist)
So benutzt man die Klasse:
Delphi-Quellcode:
Var
  C : TCSVExcel;

Begin
  C := TCSVExcel.Create ('MyExport.CSV');
  C.Open;
  C.AddString('Ein String'); // Mit '"'
  C.AddUnquoted('Noch einer'); // Ohne '"'
  C.AddInteger (123);
  C.AddFloat (123.45);
  C.AddDate (StrToDate ('24.12.2005'));
  C.NewLine;
  ... Nächste Zeile
  C.Close;
  c.Free;
End;
Im Zweifelsfall check mal EXCEL, ob es Deine Daten einlesen kann. Wenn ja, muss die Gegenseite nachbessern :mrgreen:

AndiS75 29. Nov 2005 11:14

Re: CSV Datei erstellen
 
danke erstmal für deine Klasse.Folgendes, wenn ich meine .csv Datei öffne und als txt speichere, kann ich die txt ohne Problem in Excel einlesen. Probier mal so wie Du es vorgeschlagen hast.

Danke

alzaimar 29. Nov 2005 11:48

Re: CSV Datei erstellen
 
Wenn Du sie als TXT speicherst, musst Du aber durch den Import-Assistenten durchgehen... Mit CSV sollte das unnötig sein.
Jetz fällt mir ein, das wir die Quotes ('"') für den Datenaustausch mit einem anderen ERP-System benötigt haben. Es kann sein, das die '"' gar nicht zur Spezifikation gehören. Andere Fallstricke sind aber z.B. Dezimalpunkte (Punkt, oder Komma?) und das Datumsformat.

Typisch Amis: Denken sich CSV aus, nennen das auch noch 'Comma Separated Values' und benutzen dann den variablen Listentrenner, Dezimalpunkt sowie Datumsformat und trennzeichen. Eigentlich müsste das Format so heissen:
"Listseparator separated Values which cannot be exchanged among PCs with different national settings (or even PC which stand next to each other)"

Ich würde so vorgehen:
Erstelle eine Beispieldatei in Excel (eine Zeile reicht ja).
Speichere sie als CSV und analysiere den Inhalt.
Bastle solange herum, bis Dein Output dem EXCEL-Format entspricht.

AndiS75 29. Nov 2005 15:55

Re: CSV Datei erstellen
 
also hab des rätsels lösung. das problem liegt darin, dass excel die von mir erstellte .csv datei nicht richtig darstellt.
ich habs denen mal geschickt und die hatten kein problem meine datei zu importieren. also der ganze zirkus, für die katz. trotzdem danke für die anteilnahme.

gruß

andreas

AndiS75 29. Nov 2005 15:59

Re: CSV Datei erstellen
 
ach nochwas. wie kann ich beim savedialog die einzelnen buttons ansprechen. also wenn ich ok drückt kommt "bla" und wenn ich abbrechen drück kommt "blabla".


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