C++ Text Abschnitte in Array Speichern
-
Moin,
Ich weiß die Frage kam bestimmt schon oft. Aber ich finde einfach nicht das richtige was ich brauche.
Folgende Situation:
Ich habe ein Text-Datei die z.B. so aufgebaut ist:
1, 2, 3, 4, a, 5, usw.
Ich möchte nun dass die Zahl 1 in einem Array steht, die Zahl 2 in einem Array usw.
Ich denke ihr versteht was ich meine. Jedoch weiß ich nicht wie ich C++ jetzt erklären soll,
dass das Komma das Trennzeichen ist. :Slg
-
Ungetestet:
// Liest ein bestimmtes Zeichen aus einem Stream, ansonsten Fehler template<char C> std::istream& read_char(std::istream& in) { char c; if(in >> c && c != C) in.setstate(std::ios_base::failbit); return in; } int main() { std::vector<int> values; for(int value; std::cin >> value >> read_char<','> ; ) values.push_back(value); }
P.S.: Was hat es mit dem 'a' in den Daten auf sich? Tippfehler?
-
Das a ist kein Tippfehler. Ich will später in der Ausgabe-Datei nur Buchstaben haben. Aber das weiß ich schon wie es funktioniert. Mal schauen ob es auch klappt.
Danke für die wahnsinns schnelle Hilfe.
-
Und falls du ungültige Werte überspringen möchtest:
#include <iostream> #include <sstream> #include <vector> #include <limits> #include <stdexcept> int main() { std::istringstream stream{"1, 2, 3, 4, a, 5"}; std::vector<int> values; std::string str; while( std::getline(stream, str, ',') ) try { values.push_back(std::stoi(str)); } catch( std::invalid_argument const& ){} //Ausgabe: for(auto i : values) std::cout << i << ' '; }
-
jack4flash schrieb:
Das a ist kein Tippfehler. Ich will später in der Ausgabe-Datei nur Buchstaben haben. Aber das weiß ich schon wie es funktioniert. Mal schauen ob es auch klappt.
Klappen ist so eine Sache mit dem Beispiel. Ich dachte in der Datei stehen nur Zahlen (und Kommas) drin. Mein Code wird daher beim 'a' abbrechen. Ich verstehe auch nicht, was dein Ziel ist. "Ich will später in der Ausgabe-Datei nur Buchstaben haben." Heißt das, du möchtest alle Buchstaben aus der CSV-Datei und die Zahlen überspringen? Das ginge auch viel einfacher.
-
Ok, ganz genau gesagt ist es so:
Ich habe eine .sql Datei und darin stehen Email-Adresse.
Am ende soll eine Ausgabe Datei entstehen, wo nur die Email Adressen enthalten sind.
-
Sag das doch gleich. Kannst du das Format der Datei genauer beschreiben?
-
Das sieht ungefähr so aus:
NULL, 32458, email@email.de, NULL, usw.
Wobei die Email nicht immer an der gleichen stelle steht.
Natürlich ist das ganze mehrere Zeilen lang.
-
Kann's sein, dass du gerade versuchst, das SQL Format zu lesen? Benutz doch eine SQL-Bibliothek!
-
Jaein.
Ich hab eine Backup-Datei von meiner Datenbank, im SQL-Format. In dieser sind Email Adressen enthalten und mein C++ Programm soll diese Email-Adressen in eine andere Datei schreiben.
Update:
Das splitten bekomme ich so hin:
char str1[] = "just,moment"; char str2[] = ","; char * pnt; pnt=strtok(str1, str2); while( pnt!=NULL){ printf( "%s\n", pnt); pnt = strtok (NULL, str2); }
Die Quelldatei wird so geladen:
std::ifstream Quelldatei; Quelldatei.open("C:/Users/Benutzer/Desktop/test.sql", std::ios_base::in);
Jetzt weiß ich aber nicht wie ich dem char str1 den Textinahlt zu weise. Geht das überhaupt? Ich habs mit einer While-Schleife so versucht:
char c; int z = 0; while (Quelldatei.get(c)) { str1[z].put(c); z++; }
Aber natürlich bekomme ich so einen Fehler.