In StringGrid laden einer Semikolon getrennten CSV Datei
-
Hallo,
ich möchte eine CSV Datei in einen StringGrid importieren, die Anzahl der Spalten ist variabel, diese werden vorher über einen RecordCount eines ADO Query gesetzt.Mein Problem welches ich habe, mir sind Methoden oder Befehle unbekannt welche mir beim Laden in eine TStringListe die Möglichkeit geben, Semikolon zu erkennen und die Spalte zu wechseln.
void __fastcall TLibary::batch_loadClick(TObject *Sender) { TStringList *load; load = new TStringList; String pfad="leer"; Open->Filter="Semikolon getrennte CSV Datei | *.csv"; Open->Execute(); if (Open->FileName!=""){ pfad =(Open->FileName); Open->CleanupInstance(); load->LoadFromFile(pfad); batch_grid->RowCount=load->Count; int a = 1, b = load->Count; batch_progress->Max=load->Count; do { batch_grid->Cells[0][a] = load->Strings[a]; a++;} while (a<b);} }
Open ist mein OpenDialog, batch_grid das TStringGrid. Die Funktion läuft soweit das das StringGrid entsprechend der Anzahl der StringList erweitert wird, ich möchte aber dahin kommen, dass bei einem Semikolon automatisch alles nachfolgende eine Spalte nach rechts verschoben wird,..... bis der RecordCount vom Query erreicht wird, danach soll dann die nächste Zeile verarbeitet werden.
Ich weiß das ich für die Verteilung dann einen [x][y] Schleifen-Counter verwenden kann, was ich nicht weiß wie ich beim zuteilen des StringGrid einen einzelenen String einer StringListe trenne und den Spalten zuteile, oder zwischen lager in einem AnsiString.
Vielen Dank für eure Hilfe
-
Hallo,
bin mir nicht ganz sicher Dich richtig verstanden zu haben.
Der folgende Code zeigt Dir wie Du die Daten aus einer CSV ind den StringGrid bekommst. Der Zeilenumbruch in der CSV bewirkt hier auch den Sprung in die nächste Zeile des Grid. Feste Spalte und Zeile ist hier ebenfalls nicht berücksichtigt.TStringList *load = new TStringList; TStringList *line = new TStringList(); line->Delimiter = ';'; String pfad="leer"; Open->Filter="Semikolon getrennte CSV Datei | *.csv"; if (Open->Execute()){ load->LoadFromFile(Open->FileName); batch_grid->RowCount=load->Count; for (int i = 0; i < load->Count; i++) { line->DelimitedText = load->Strings[i]; for (int j = 0; j < line->Count; j++) { batch_grid->Cells[j][i]=line->Strings[j]; } } }
Gruß Myerscola
-
vielen Dank das hilft mir ungemein weiter, eine kleine Sache ist nur das auch bei Leerzeichen getrennt wird.
CSV-Datei
Befehlsname;Host / IP-Adresse;Benutzername;Passwort
Jennifer Paul;192.168.0.25;Name;Passwort
......p.s. sry für mein etwas wirr geschriebenen Code
-
Hab im Moment keinen BCB hier, aber gab es da nicht was mit StrictDelimiter?
Gruß KK
-
StrictDelimiter ist sicher die Lösung wenn der zur Verfügung steht. Ich habe selbst CBuilder6, da gibt es so was noch nicht. Aber vielleicht hilft dir der Thread hier weiter:
http://www.c-sar.de/forum/viewtopic-var-t-is-239902-and-highlight-is-leerzeichen.html