CSV in StringGrid
-
ok, sagen wir es anders. Ich kann eine CSV-Datei in eine Stringlist lesen, kapiere dann aber nicht wie ich die Werte in die Zellen der StringGrid bekomme.
-
Was hast du konkret versucht, wie sieht die Datei aus und was ist das Ergebnis?
Wie soll dir jemand helfen, wenn du keine Informationen gibst!?
-
String Daten[5][5]; TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.csv"); TStringList *line = new TStringList(); line->Delimiter = ';'; for (int y = 0; y < list->Count; y++) // Zeilen abklappern { line->DelimitedText = list->Strings[y]; // aktuelle Zeile einlesen for (int x = 0; x < line->Count; x++) Daten[x][y] = line->Strings[x]; // Zeile aufsplitten StringGrid1->Cells[x][y]=list->Strings[y]; } delete line; delete list;Das war mein letzter Stand, da war von Dir, nur meine Modifikation bringt:
[C++ Fehler] Unit1.cpp(31): E2451 Undefiniertes Symbol 'x'
Verstehe ich nicht, x ist doch definiert.
-
so sollte es gehen, Du hast die List ja nicht zerlegt um damit weiterzuarbeiten,
also nicht list->Strings[y] sondern line->Strings[x];String Daten[5][5]; TStringList *list = new TStringList(); list->LoadFromFile("c:\\test.csv"); TStringList *line = new TStringList(); line->Delimiter = ','; for (int y = 0; y < list->Count; y++) // Zeilen abklappern { line->DelimitedText = list->Strings[y]; // aktuelle Zeile einlesen for (int x = 0; x < line->Count; x++) { Daten[x][y] = line->Strings[x]; // Zeile aufsplitten StringGrid1->Cells[x][y]=line->Strings[x]; } } delete line; delete list;
-
Hallo,
Mir ist hier noch nicht ganz klar woher du weißt, wieviele Zeilen es gibt.
Ich biete hier mal folgendes an.#include <string> #include <vector> #include <fstream> std::ifstream in("test.txt"); std::string tstr; std::vector<std::string> str_vect; while( std::getline(in, tstr)) { if( in.good()) { str_vect.push_back(tstr); } } TStringList *line = new TStringList; line->Delimiter = ';'; StringGrid1->RowCount = str_vect.size(); for( int i=0; i<StringGrid1->RowCount; ++i) { line->DelimitedText = std_vect[i].c_str(); if( line->Count > StringGrid->ColCount) StringGrid->ColCount = line->Count; StringGrid->Rows[i]->Text = line->Text; } delete line;[edit]Header und namespace eingefügt[edit]
-
Hallo, das von myerscola geht nachdem ich ',' durch ';' ersetzt habe, das von braunstein bringt diese Meldungen:
[C Fehler] Unit1.cpp(66): E2451 Undefiniertes Symbol \\'string\\'
[C Fehler] Unit1.cpp(66): E2379 In Anweisung fehlt ;
[C Fehler] Unit1.cpp(67): E2451 Undefiniertes Symbol \\'vector\\'
[C Fehler] Unit1.cpp(67): E2451 Undefiniertes Symbol \\'str_vect\\'
[C Fehler] Unit1.cpp(68): E2451 Undefiniertes Symbol \\'tstr\\'
[C Fehler] Unit1.cpp(68): E2285 Keine Übereinstimmungür'getline<_CharT,_Traits,_Alloc>(ifstream,undefined)'gefunden [C Fehler] Unit1.cpp(68): E2268 Aufruf der undefinierten Funktion \\'getline\\'
[C Fehler] Unit1.cpp(80): E2451 Undefiniertes Symbol \\'std_vect\\'
Ich habe bisher nur mit 5 Rows und 5 Cols gearbeitet und deshalb war das bisher bekannt.
-
Hallo
Dir fehlen Grundlagen von C++.
string (kleingeschieben) ist Teil des C++ Standards und Teil des namespaces std, genaus wie ifstream.
Das muß also heißenstd::string tstr;Oder oben in der Implementationsdatei (nie im Header)
using namespace std;bis bald
akari
-
Quelltext wurde angepasst.

-
ich habe es jetzt mal so angepasst:
std::ifstream in("test.txt"); std::string tstr; vector<string> str_vect; while( getline(in, tstr)) { if( in.good()) { str_vect.push_back(tstr); } } TStringList *line = new TStringList; line->Delimiter = ','; StringGrid1->RowCount = str_vect.size(); for( int i=0; i<StringGrid1->RowCount; ++i) { line->DelimitedText = str_vect[i].c_str(); if( line->Count > StringGrid1->ColCount) StringGrid1->ColCount = line->Count; StringGrid1->Rows[i]->Text = line->Text; } delete line;bringt mit dann aber einen AccessViolation:
const _CharT* c_str() const { return this->_M_start; }DAnke und Gruß Mark
-
Der Code sollte so eigentlich funktionieren. Welchen Builder hast du denn?
-
war leider den ganzen Tag mit Arbeit unterwegs. ich habe CBuilder 6 prof.