Wie lese und schreibe ich mit der Konsole in und von eine/r csv Datei?
-
Guten Abend Zusammen,
ich möchte eine csv Datei einlesen und die Daten, die eingegebenen Daten in dieselbe Datei wieder schreiben.
Es gibt eine csv Datei. In dieser sind 3 Spalten und "unbestimmt" viele Zeilen.
1.Spalte beinhaltet einen Text mit dem Datentyp integer
2.Spalte beinhaltet einen Text mit dem Datentyp double
3.Spalte beinhaltet einen Text mit dem Datentyp char[7]Wie soll nun die vom Benutzer eingegebene Variable z.B. in der 2.Spalte 576,4532 in die csv Datei geschrieben werden?
Ich habe hier im Forum diesen Codeschnipsel gesehen, der die Daten einliest:
Aber wie schreibe ich nun in die Datei rein, wenn der Benutzer etwas eingibt. Brauche ich für jede Spalte eine for Schleife die Spalte für Spalte durchgeht?
Ich verstehe es nicht!! Bitte klärt mich auf.#include <iostream> #include <fstream> #include <string> using namespace std; struct CSVDaten { int iZahlen1; double dZahlen2; char cArray[7]; }; istream& lese_ein(istream& in, CSVDaten& p) { getline(in, p.iZahlen1, ';'); getline(in, p.dZahlen2, ';'); getline(in, p.cArray[7], '\n'); return in; } int main() { cin >> iZahlen1; cin >> iZahlen2; cin >> cArray[7]; //Nur 8 Zeichen schreiben ifstream csvread("C:\\Users\\User\\Desktop\\testcplusplus.csv"); if (!csvread.is_open()) cerr << "Fehler beim Oeffnen der Datei!" << endl; else { for (CSVDaten CSVDaten; lese_ein(csvread, CSVDaten);) { cout << CSVDaten.iZahlen1<< endl; cout << CSVDaten.dZahlen2<< endl; cout << CSVDaten.cArray[]<< endl; getchar(); } } return 0; }Ich habe mich zwar schon in die Dateioperationen und Referenzen eingelesen, jedoch geht alles spurlos an mir vorbei, weil ich sämtliches durcheinander bringe.
-
Dateien kenne keine Spalten, Zeilen oder andere Formatierungen. Eine Datei ist nur eine lange Kette von Zeichen, die Interpretation als Zeilen und Spalten erfolgt erst durch die Software, die die Dateien anzeigt. Folglich kannst du nicht gezielt in eine Zeile oder Spalte schreiben (außer du kannst dir ausrechnen, das wie vielte Zeichen in der Datei überschrieben werden muss). Letztlich wird es daher wohl darauf hinaus laufen, dass du die Daten einfach komplett an einem Stück rausschreibst.
-
Danke für deine Antwort,
es wird also alles eingelesen und dann einzelnes wiedergegeben. Wie soll das gehen?
Ich öffne die Datei mit:
FILE *f; f = fopen("C:\\Users\\User\\Desktop\\testcplusplus.csv", "rwb");Dann packe ich alles mit getline in einen string und trenne sie wieder auseinander?
Benutzer 1:
int iZahlen1 = 1392469;
double dZahlen2 = 789,6823;
char cArray[7] = 91774983;Benutzer 2:
int iZahlen1 = 4321354;
double dZahlen2 = 821,5342;
char cArray[7] = 30974618;Benutzer 3:
int iZahlen1 = 914383786;
double dZahlen2 = 43133,52;
char cArray[7] = 73526893;Dem Benutzer 2 identifiziere ich mit seiner iZahlen1, welche 4321354 ist.
Benutzer 2 ändert jetzt dZahlen2 von 789,6823 auf 18334,84Wie schreibe ich dann genau diese Zahl in die jeweilige Stelle?
-
b1419589 schrieb:
Ich öffne die Datei mit:
FILE *f; f = fopen("C:\\Users\\User\\Desktop\\testcplusplus.csv", "rwb");Wieso C-Dateizeiger? Iostreams kennst du doch offensichtlich.
Dann packe ich alles mit getline in einen string und trenne sie wieder auseinander?
Und wie würdest du den string auftrennen? Lass mich raten: Indem du ihn in einen Stringstream packst und aus diesem liest? Lies doch gleich passend aus dem Dateistream!
Wie schreibe ich dann genau diese Zahl in die jeweilige Stelle?
Wie schon gesagt: Gar nicht. Du musst alles im ganzen rausschreiben oder dir ein Format ausdenken, dass es erlaubt, Änderungen am Ende anzuhängen.
-
Wenn ich nicht den ganzen Tag über mich mit Try&Error im Kreis drehen würde, müsste ich um ein funktionierendes Beispiel nicht bitten..
Kannst du mir ein kommentiertes Beispiel aufzeigen?
-
Die Zeilen 13-19 und Zeile 30 in deinem Beispielprogramm, hast du die selber geschrieben?
-
Nein, hier im Forum fand ich dieses Listing als Beispiel.
-
b1419589 schrieb:
Ich habe mich zwar schon in die Dateioperationen und Referenzen eingelesen, jedoch geht alles spurlos an mir vorbei, weil ich sämtliches durcheinander bringe.
Und wieso meinst Du, wir könnten es besser erklären, als die zahlreichen Anleitungen, die spurlos an Dir vorbei gehen?