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-Datei die mit Semikolons getrennt ist einlesen (https://www.delphipraxis.net/94856-csv-datei-die-mit-semikolons-getrennt-ist-einlesen.html)

HolgerCW 27. Jun 2007 09:44


CSV-Datei die mit Semikolons getrennt ist einlesen
 
Hallo zusammen,

habe folgenden Code hier im Forum gefunden:

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.LoadFromFile('Datei.csv');
sCols := TStringList.Create;
sCols.CommaText := sRows[0];
FormCSV.StringGridCSV.ColCount := sCols.Count;
sCols.Free;
FormCSV.StringGridCSV.RowCount := sRows.Count;
for i := 0 to Pred(sRows.Count) do
 FormCSV.StringGridCSV.Rows[i].CommaText := sRows[i];
 sRows.Free;
Diese trennt aber die Spalten bei einem Komma, wie stelle ich das um auf Semikolon ?

Gruss

Holger

CCRDude 27. Jun 2007 09:52

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Delphi-Quellcode:
sCols.Delimiter := ';';
sCols.StrictDelimiter := true; // falls leerzeichen ohne anführungszeichen...
sCols.DelimitedText := 'Hallo;Welt';

HolgerCW 27. Jun 2007 09:55

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Vielen Dank für die Hilfe,

wie binde ich denn das jetzt in den Code ein ?

Gruss

Holger

mkinzler 27. Jun 2007 10:30

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Ab Zeile 2 (Die 3. natürlich nicht)

HolgerCW 27. Jun 2007 10:42

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Also wenn ich den Code mit dem Delimiter benutze...

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.LoadFromFile('Datei.csv');
sCols.Delimiter := ';';
sCols.StrictDelimiter := true;
sCols := TStringList.Create;
sCols.CommaText := sRows[0];
FormCSV.StringGridCSV.ColCount := sCols.Count;
sCols.Free;
FormCSV.StringGridCSV.RowCount := sRows.Count;
for i := 0 to Pred(sRows.Count) do
 FormCSV.StringGridCSV.Rows[i].CommaText := sRows[i];
 sRows.Free;
... trennt der trotzdem immer noch bei dem Komma

Liegt das vielleicht an dem Befehl '.CommaText' ?

Gruss

Holger

mkinzler 27. Jun 2007 10:49

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Du mußt die Eigenschaften setzen, bevor du den Text einlädst:
Delphi-Quellcode:
sRows := TStringList.Create;
sCols.Delimiter := ';';
sCols.StrictDelimiter := true;
sCols.LoadFromFile('Datei.csv');
Zitat:

Liegt das vielleicht an dem Befehl '.CommaText' ?
ja. du mußt .DelimitedText nehmen.

HolgerCW 27. Jun 2007 11:34

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Habe es jetzt so umgebaut, aber er trennt immer noch beim Komma:

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.Delimiter := ';';
sRows.StrictDelimiter := true;
sRows.LoadFromFile('Datei.csv');
sCols := TStringList.Create;
sCols.DelimitedText := sRows[0];
FormCSV.StringGridCSV.ColCount := sCols.Count;
sCols.Free;
FormCSV.StringGridCSV.RowCount := sRows.Count;
for i := 0 to Pred(sRows.Count) do
 FormCSV.StringGridCSV.Rows[i].DelimitedText := sRows[i];
 sRows.Free;
Gruss

Holger

mkinzler 27. Jun 2007 11:36

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Du hast auch die Eigenschaften bei der falschen StringListe gesetzt.

HolgerCW 27. Jun 2007 11:48

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Wenn ich das so mache...

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.LoadFromFile('Datei.csv');
sCols := TStringList.Create;
sCols.Delimiter := ';';
sCols.StrictDelimiter := true; // falls leerzeichen ohne anführungszeichen...
sCols.DelimitedText := sRows[0];
FormCSV.StringGridCSV.ColCount := sCols.Count;
sCols.Free;
FormCSV.StringGridCSV.RowCount := sRows.Count;
for i := 0 to Pred(sRows.Count) do
 FormCSV.StringGridCSV.Rows[i].DelimitedText := sRows[i];
 sRows.Free;
... trennt der immer nocoh am Komma ...

Gruss

Holger

mkinzler 27. Jun 2007 11:51

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Wie wärs mit
Delphi-Quellcode:
FormCSV.StringGridCSV.Rows.Delimiter := ';';
?
[Edit: richtigen Delimiter]

CCRDude 27. Jun 2007 11:52

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Weil der Delimiter und StrictDelimiter für alle FormCSV.StringGridCSV.Rows[i] wahrscheinlich nicht gesetzt sind?

PS: Nach da drüber: soll doch ';' und nicht ',' sein ;-)

HolgerCW 27. Jun 2007 13:16

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Habe nun die Lösung:

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.LoadFromFile('Datei.csv');

sCols := TStringList.Create;
sCols.DelimitedText := sRows[0];

FormCSV.StringGridCSV.ColCount:=sCols.Count;
sCols.Free;

FormCSV.StringGridCSV.RowCount := sRows.Count;

for i := 0 to Pred(sRows.Count) do
begin
 FormCSV.StringGridCSV.Rows[i].Delimiter := ';';
 FormCSV.StringGridCSV.Rows[i].StrictDelimiter := true;
 FormCSV.StringGridCSV.Rows[i].DelimitedText := sRows[i];
end;
sRows.Free;
Habe da noch ein abschliessende Frage:

- Wie kann ich die Daten aus der CSV-Datei von Spalte 1 bis ... in das StringGrid schreiben. Heisst: Spalte 0 soll leer bleiben.

Gruss

Holger

CCRDude 27. Jun 2007 13:35

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Probieren geht über studieren ;)
Spiel doch einfach mal ein bißchen mit TStrings/TStringList rum, um zu wissen was das macht und wie es geht. Folgendes Beispielsweise würde eine leere erste Spalte schreiben (nicht die eleganteste Methode, aber evtl. die mit den wenigsten Abweichungen):

Delphi-Quellcode:
// sCols.Free; streichen!
for i := 0 to Pred(sRows.Count) do begin
   FormCSV.StringGridCSV.Rows[i].Delimiter := ';';
   FormCSV.StringGridCSV.Rows[i].StrictDelimiter := true;
   sCols.DelimitedText := sRows[i];
   sCols.Insert(0, '');
   FormCSV.StringGridCSV.Rows[i].DelimitedText := sCols.DelimitedText;
end;
sCols.Free; // stattdessen hier!
sRows.Free;

HolgerCW 27. Jun 2007 13:48

Re: CSV-Datei die mit Semikolons getrennt ist einlesen
 
Hi,

die Spalte wird wohl eingefügt, nur fehlt nun wieder die Trennung beim Semikolon. Es wird wieder beim Komma getrennt.

So habe ich es umgebaut:

Delphi-Quellcode:
sRows := TStringList.Create;
sRows.LoadFromFile('Datei.csv');

sCols := TStringList.Create;
sCols.DelimitedText := sRows[0];

FormCSV.StringGridCSV.ColCount:= sCols.Count;
FormCSV.StringGridCSV.RowCount := sRows.Count;

for i := 0 to Pred(sRows.Count) do
begin
 FormCSV.StringGridCSV.Rows[i].Delimiter := ';';
 FormCSV.StringGridCSV.Rows[i].StrictDelimiter := true;
 sCols.DelimitedText := sRows[i];
 sCols.Insert(0, '');
 FormCSV.StringGridCSV.Rows[i].DelimitedText := sCols.DelimitedText;
end;
sRows.Free;
sCols.Free;
Gruss

Holger


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