kostenloser Webspace werbefrei: lima-city


csv-Datei durchsuchen

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    tft-development

    Kostenloser Webspace von tft-development

    tft-development hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo tft-development,

    das sollte eigentlich funktionieren:
    #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;
    }
    Das läuft bei mir zumindest einwandfrei. Mit Zerlegung der Zeile sieht es dann z.B. so aus:
    #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
  4. Autor dieses Themas

    tft-development

    Kostenloser Webspace von tft-development

    tft-development hat kostenlosen Webspace.

    wow danke funktioniert wie geschmiert :D
    grüße
  5. 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
  6. 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.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!