csv-Datei durchsuchen
lima-city → Forum → Programmiersprachen → C/C++ und D
array
bad
bemerkung
code
datei
erreicht string
falsch mache
fehl
fehler
feld
lese
parameter
spalten
speichern
start
string
test
tip
vorliegen
zeile
-
Hallo
Ich versuche gerade ein .csv Datei mit meinem c++ Programm aus zu lesen und diese dann später zeilenweise in einem Array zu speichern. Also ein Zeile besteht aus 4 spalten und soll dem nach ein Array von 0-3 füllen.
So aber jetzt mein Problem ich bekomme es gar nicht richtig hin die Datei einzulesen.
Hier ist mein Code den ich im Netz gefunden hab nach dem ich den halben Nachmittag gegoogelt hab, hat jemand einen Tipp was ich falsch mache?
hier der Code:
fstream datei1("testdatei.csv", ios::in); string s; datei1.open("testdatei.csv", ios::in); // Öffne Datei aus Parameter while (!datei1.eof()) // Solange noch Daten vorliegen { getline(datei1, s); // Lese eine Zeile cout << s << endl; // Zeige sie auf dem Bildschirm } datei1.close();
Wäre super wenn mir jemand helfen könnte, damit ich mir endlich überlegen kann wie ich das mit dem Durchsuchen und Array anstellen kann. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo tft-development,
das sollte eigentlich funktionieren:
Das läuft bei mir zumindest einwandfrei. Mit Zerlegung der Zeile sieht es dann z.B. so aus:123456789101112131415161718192021#include <iostream>
#include <fstream>
#include <string>
using
namespace
std;
int
main(
int
argc,
char
** argv)
{
fstream csv(
"test.csv"
, fstream::in);
// Öffne die Datei zum Lesen
while
(!csv.eof())
// Solange Dateiende nicht erreicht
{
string s;
getline(csv, s);
// Lese Zeile
cout << s << endl;
}
csv.close();
// Schließe Datei.
return
0;
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using
namespace
std;
vector<string> * split_line(
const
string& line,
const
string& separator)
{
size_t
start, end;
// Start und Ende eines gefundenen Substrings
size_t
sep_length = separator.length();
// Länge des Separators
vector<string> * v =
new
vector<string>();
// vector zum Speichern der Felder
start = 0;
while
((end = line.find(separator, start)) != string::npos)
{
v->push_back(line.substr(start, end-start));
start = end + sep_length;
}
end = line.length();
v->push_back(line.substr(start, end-start));
return
v;
}
int
main(
int
argc,
char
** argv)
{
fstream csv(
"test.csv"
, fstream::in);
// Öffne die Datei zum Lesen
while
(!csv.eof())
// Solange Dateiende nicht erreicht
{
string s;
getline(csv, s);
// Lese Zeile
vector<string> * fields = split_line(s,
"\t"
);
// Zerlege Zeile
for
(
size_t
i = 0; i<fields->size(); i++)
cout << (*fields)[i] <<
"#"
;
// gebe Felder aus
cout << endl;
delete
fields;
// Zerstöre vector
}
csv.close();
// Schließe Datei.
return
0;
}
Beitrag zuletzt geändert: 29.8.2013 15:57:59 von darkpandemic -
wow danke funktioniert wie geschmiert :D
grüße -
Vielleicht machst du dir damit auch das Leben einfacher:
http://stackoverflow.com/questions/7827274/whats-the-preferred-library-for-csv-parsing-writing-in-c
Beitrag zuletzt geändert: 30.8.2013 8:48:21 von tchab -
Anscheinend haben hier einige immer noch Probleme mit dem korrekten Error-Handling bei Dateizugriffen:
#include <fstream> #include <iostream> #include <string> int main() { std::string line; std::fstream fs("schnappi.txt",std::ios::in); if(fs.bad()) { std::cerr << "Ein Fehler ist aufgetreten." << std::endl; return 1; } while(getline(fs,line)) { std::cout << "Z: " << line << std::endl; } fs.close(); return 0; }
Bemerkung: evt. existiert die Datei nicht, so wird kein Fehler ausgegeben, das Öffnen schlägt fehl und somit ist eof() nicht definiert. Da ist es doch schöner,. zu prüfen ob die Datei korrekt geöffnet wurde und ob getline() denn fehlschlägt.
Ansonsten sollte man z.B. darauf achten, dass jede Zeile gleich viele Spalten haben und die Spalten z.B. nur die erwünschten Zeichen beinhalten. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage