Text in String-Variable in Zeilen aufteilen
-
Hallo
Datei mit TStringList öffnen, dadurch werden Zeilen werden automatisch getrennt. Zugriff über die Eigenschaft Strings[], manuelles kopieren in Array.
Wobei ich die Nützlichkeit eines einfachen C-Arrays bezweifle. Verwende std::map<string,string> um die Werte im Format <Name,Wert> zu speichern. Oder (wenn die Datenmenge und -bezeichnung immer gleich ist) gleich ein richtiges typsicheres struct wo jeder Wert seine eigene Membervariable hat.
bis bald
akari
-
f.sp schrieb:
"string Daten;"
Ist das die C++-String-Klasse?
-
Schreib Dir die Daten in eine StringList, dann kannst Du sogar mit TStringList::Names und TStringList::Values arbeiten. Dazu sollte es völlig ausreichen, den String der Eigenschaft TStringList::Text zuzuweisen. Bei jedem Zeilenumbruch sollte automatisch eine neue Zeile in der Stringlist angelegt werden. Für die StringList gilt dann wieder das gleiche, wie für das RichEdit in dem anderen Thread.
-
Sorry, ich bin glaub einfach zu blöd, ich finde weder im Forum noch in der BCB-Hilfe ein geeignetes Beispiel an dem ich verstehe wie ich die TStringList verwende...
Ich habe jetzt oben noch meinen Ansatz eingefügt, könnt ihr mir dadran vielleicht erklären wie ich die TStringList verwenden kann?
Wäre echt Super!
string Daten; string Zeilen[25]; for(int loop=0; loop<25; ++loop) { Zeilen[loop] = ??????????????????; }
-
Hallo
Ohne Kommentar...
TStringList* file = new TStringList(); file->LoadFromFile("Dateiname"); for (int lv = 0; lv < file->Count; lv++) ... = file->Strings[lv]; delete file;
bis bald
akari
-
hier ist noch interessant die von Joe angesprochenen StringList::Names, TStringList::Values zu verwenden.
-
Es ist immer noch das Problem dass die Daten nicht in einer Datei sondern in einer Variable liegen...
-
TStringList* file = new TStringList(); file->Text = Daten.c_str(); // oder so ähnlich for (int lv = 0; lv < file->Count; lv++) ... = file->Strings[lv]; delete file;
-
Hallo
Wenn "Daten" ein AnsiString oder C-String ist brauchst du nichtmal das c_str()
/Edit : offenbar ist es doch ein std::string
bis bald
akari
-
In dem Fall, wenn die Zeilenumbrüche mit drin sind und die Variable ein string ist
string text; // irgendwie gefüllt TStringList* file = new TStringList(); file->Text = text.c_str();
[edit]Viel zu spät. [edit]
-
Irgendwie reden hier alle aneinander vorbei. Liegt aber auch daran, dass f.sp meine Frage oben nicht beantwortet hat.
-
Also ich han jetzt mal ein kleines Testprogramm geschrieben...
#include <iostream.h> void main() { string Eingang = "dasfakshf sdajhfkajsf \n asdhfjhaskdfh adfsjlaskjfd \n sdafjlasjkdf sdfkjalks"; TStringList* Daten = new TStringList(); Daten->Text = Eingang.c_str(); string Zeilen[3]; for(int loop=0; loop<3; ++loop) { Zeilen[loop] = Daten->Strings[loop]; } getchar(); }
Muss ich für die TStringList noch eine Headerdatei einbinden?
ich bekomme immer die Fehlermeldungen:
[C++ Fehler] Unit1.cpp(6): E2451 Undefiniertes Symbol 'TStringList' [C++ Fehler] Unit1.cpp(6): E2451 Undefiniertes Symbol 'Daten' [C++ Fehler] Unit1.cpp(6): E2303 Typname erwartet [C++ Fehler] Unit1.cpp(6): E2379 In Anweisung fehlt ;
Gruß,
Freddy
-
Hallo
Also echt, kannst du nicht von Anfang an sagen das du ein Konsolenprogramm ohne VCL-Unterstützung haben wilst?!
Entweder must du noch#include <vcl.h>
hinzufügen oder besser noch du beschränkst du weiterhin auf Standardmittel wie std::stringstream und std::getline.
/Edit : Und am besten gleich noch ein Grundlagentutorial zum Thema Standardkonformes C++ durcharbeiten.
bis bald
akari