000
16.12.2005, 10:55 Uhr
~hallo_eva
Gast
|
Hallo.
ich schreibe gerade an einem Programm, das aus einem Cvs File Daten ausliest, und diese dann in einem STL Vector ablegt, so dass man dann in diesen Vektoren suchen kann. Der Compiler schluckt meinen Code, allerdings wird das falsche ERgebnis ausgegeben. Hoffentlich könnt ihr mir helfen:
Datenbank.cpp
C++: |
#define delimiter ";" #include <windows.h> #include <vector> #include <iterator> #include <fstream>
#include <iostream> #include <string>
using namespace std; using std::copy; using std::cout; using std::ostream_iterator; using std::vector;
#include "stdafx.h" #include "data.h"
#define inputfile "C:\\Daten1.csv" #define MAX_LINESIZE 250
//---------------------Daten zeile für Zeile einlesen ---------------
void readData(vector<Data> &data) { std::ifstream ifs("c:\\Daten1.csv"); if (!ifs) { cout << "Kann nicht geöffnet werden " << "c:\\Daten1.csv" << endl; exit(1); } char line[MAX_LINESIZE]; while (!ifs.eof()) { ifs.getline(line, MAX_LINESIZE,';'); Data::readDt(data, line); ; } ifs.close(); std::ostream_iterator <Data> output(cout, "\n"); std::copy(data.begin(), data.end(), output); }
void main()
{ //----------- Vektor erzeugen und ReadData aufrufen ---------------------- vector <Data> pv; readData(pv);
Sleep(100000); }
|
Meine Header:
C++: |
#if !defined(DATA_H)
#define DATA_H #include <iostream> #include <string> #include <vector> #include <stdlib.h>
using std::cout; using std::endl; using std::ostream; using std::string;
/** ------------------------- Klasse Data ---------------------------**/ class Data {
public: Data(); Data (int, int, string, string, string); int getId () const; //Definition der Funktionen int getHsv() const; string getName() const; string getArtist() const; string getPath() const; static void readDt(std::vector<Data> &data, char *line); void print() const; int id; int hsv; string name; string artist; string path; friend ostream &operator<<(std::ostream &output, const Data &p); }; #endif
Data::Data() {} Data::Data(int i, int h, string n, string a, string p) : id(i), hsv(h), name(n), artist(a), path(p) {}
int Data::getId() const { return id; }
int Data::getHsv() const { return hsv; }
string Data::getName() const { return name; } string Data::getArtist() const { return artist; }
string Data::getPath() const { return path; } void Data::print() const { cout << *this ;}
ostream &operator<<(std::ostream &output, const Data &p) { output << "\nFile on "; output << p.name << " " << p.artist << endl; output << "Id: " << p.id << endl; output << "HSV: " << p.hsv << endl; output << "Pfad: " << p.path << endl; output << endl; return output; }
/** -------------Daten in Vektor einlesen ------------------**/ void Data::readDt(std::vector<Data> &data, char *line) { Data dt; if (!line[0]) return; char *token = strtok(line, delimiter); token = strtok(NULL, delimiter); //ID if (token!=NULL) { dt.id = atoi(token); } token = strtok(NULL, delimiter); //HSV if (token!=NULL) { dt.hsv = atoi(token); } token = strtok(NULL, delimiter); //Name if (token!=NULL) { dt.name = string(token); } token = strtok(NULL, delimiter); //Künstler if (token!=NULL) { dt.artist = string(token); } token = strtok(NULL, delimiter); //Pfad if (token!=NULL) { dt.path = string(token); }
data.push_back(dt); }
|
Zur Vollständigkeit auch noch mein Csv Datensatz:
Zitat: |
1;250;Blaues Pferd;Franz Marc;Cblue_horse_col.bmp 1;123;No Name;Cesanne;CCesanne.bmp 1;120;Sunflowers;Van Gogh;CvanGogh.bmp 1;3;Test;Testkünstler;Ctest.bmp
2;;Blaues Pferd;Franz Marc;Cblue_horse_col.bmp 2;;No Name;Cesanne;CCesanne.bmp 2;;Sunflowers;Van Gogh;CvanGogh.bmp 2;;Test;Testkünstler;Ctest.bmp
3;;Blaues Pferd;Franz Marc;Cblue_horse_col.bmp 3;;No Name;Cesanne;CCesanne.bmp 3;;Sunflowers;Van Gogh;CvanGogh.bmp 3;;Test;Testkünstler;Ctest.bmp
|
Vielen vielen Dank für eure Mühe
Liebe Grüße Eva |