Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi CSV Dateien erzeugen und wieder einlesen (https://www.delphipraxis.net/84272-csv-dateien-erzeugen-und-wieder-einlesen.html)

needatip 14. Jan 2007 16:27


CSV Dateien erzeugen und wieder einlesen
 
Hallo,
ich erzeuge aus einer Paradox Tabelle eine ganz einfache CSV Datei mittels:

Delphi-Quellcode:
Var Zeile:String;
    StringList1 : TStringList;
    i : integer;
begin
Zeile:='';
StringList1 := TStringList.Create;
Try
Table1.First;
// Feldnamen schreiben
For i:=0 to Table1.FieldCount-1 do
    Zeile:=Zeile+Table1.Fields[i].FieldName+';';
StringList1.Add(Zeile);
// Datensätze schreiben
While NOT Table1.Eof do Begin
   Zeile:='';
   For i:=0 to Table1.Fields.Count-1 do
        Zeile:=Zeile+Table1.Fields[i].AsString+';';
   StringList1.Add(Zeile);
   Table1.Next;
End;
StringList1.SaveToFile('c:\export\xliste.CSV');
Finally
  StringList1.Free;
End;
end;
Diese Datei möchte ich dann mittels der JvCsvDataSet Komponente in einem anderen Programm, das auf einen MS SQL Server zugreift, einlesen.

Beim Einlesen bekomme ich die Fehlermeldung:
Zitat:

Unexpected error parsing CSV Field Definitions
Öffne ich aber die CSV Datei in Excel und speichere diese dort ohne Änderung wieder ab, liest die Komponente diese Datei einwandfrei ein. Excel muss also irgendeine Information hinzufügen.

Was mache ich also beim Erzeugen der Datei falsch bzw. was fehlt der Datei für eine Information????

mkinzler 14. Jan 2007 16:29

Re: CSV Dateien erzeugen und wieder einlesen
 
Es könnte das letzte Semikolon jeder Zeile sein, welches überflüssig ist.

Hador 14. Jan 2007 17:54

Re: CSV Dateien erzeugen und wieder einlesen
 
Oder Trennt Excel die Datensätze durch Kommata statt durch ein Semikolon.
Zumindest die alten Excel-Versionen haben das gemacht.

IngoD7 14. Jan 2007 18:13

Re: CSV Dateien erzeugen und wieder einlesen
 
Zitat:

Zitat von mkinzler
Es könnte das letzte Semikolon jeder Zeile sein, welches überflüssig ist.

Ja, es könnte am ehesten das letzte Semikolon sein.
Allerdings sollte ein Semikolon am Ende keinen Fehler beim Einlesen erzeugen, sondern einfach ein leeres Feld hinten am Datensatz! :roll:

Excel behandelt das auch so und lässt wahrscheinlich das letzte Semikolon dann beim Abspeichern weg. Überprüfe das. Dann hast du den Grund für den Fehler ... und den Beweis, dass die Komponente fehlerhaft einliest.

Unabhängig davon solltest du aber deine Routine umschreiben, denn wenn kein Feld mehr folgt, sollte auch kein abschließendes Semikolon geschrieben werden.

mkinzler 14. Jan 2007 18:17

Re: CSV Dateien erzeugen und wieder einlesen
 
Zitat:

Excel behandelt das auch so und lässt wahrscheinlich das letzte Semikolon dann beim Abspeichern weg. Überprüfe das. Dann hast du den Grund für den Fehler ... und den Beweis, dass die Komponente fehlerhaft einliest.
Das Verhalten ist nicht fehlerhaft, es wird ein weiteres Feld erzeugt. Dieses hat aber keinen Namen, und das erzeugt den Fehler.

IngoD7 14. Jan 2007 18:31

Re: CSV Dateien erzeugen und wieder einlesen
 
Zitat:

Zitat von mkinzler
Das Verhalten ist nicht fehlerhaft, es wird ein weiteres Feld erzeugt. Dieses hat aber keinen Namen, und das erzeugt den Fehler.

Ich weiß jetzt nicht genau, was du meinst.

Ich meine folgendes:
Ein Semikolon als Zeilenende in einer CSV-Datei ist kein Fehler. Das bedeutet nur, dass ein weiteres, leeres Feld folgt.
Eine Komponente, die daraus einen Fehler erkennt, die hat einen Fehler.

needatip 14. Jan 2007 18:37

Re: CSV Dateien erzeugen und wieder einlesen
 
:thumb: Stimmt !
Hab jetzt die Routine so geschrieben, daß das letzte Semikolon wegbleibt.
Jetzt funzts !!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz