CSV Datei einlesen...aber wie?



  • Hallo,

    und wieder komme ich nicht weiter 🙄

    Ich muss in meinem ganz einfachen und sehr sehr keinen von Elektro-Studentenhand gefertigen Programm die Double Werte aus einer .csv Datei einlesen und in ein Array Speichern.

    Soweit die Theorie 😉

    Jetzt finde ich aber leider im Internet keine Anleitung wie ich sowas anstellen kann bzw. das was ich finde sind Codesegmente die mich mehr verwirren als alles andere und die Nerven liegen blank.

    Gibt es dazu eine einfache anleitung im Netz oder vielleicht ein gutes Buch?

    kann ich da irgenwie auch wie bei den .txt Datein mit ifstream bei?



  • In welcher Formatierung liegt denn das Format vor? ASCII-Standard oder Binär?



  • Hab mal was geschrieben was dir vielleicht weiterhilft.
    Der Code liest csv Dateien mit ';' Trennzeichen und variabler Feldanzahl.
    Leerzeilen und Leerzeichen werden ignoriert. Um die Interpretierung der Datentypen, sowie anderweitige Fehlerbehandlung müsstest du dich noch kümmern.

    Es geht sicher noch eleganter, aber du solltest jetzt mal eine Ahnung haben, wie man csv Dateien einlesen kann.

    Beispiel Datei:

    1.12; 44.789; 987.12; 1
    2.13; 45.790; 988.13; 2; 23.40
    3.14; 46.791; 989.14; 3
    
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <vector>
    #include <string>
    using namespace std;
    
    int main() {
    	fstream file("example.csv", ios::in);
    	vector<double> vec;
    
    	if (!file)
    	{
    		cerr << "Can't open file..." << endl;
    		return 0;
    	}
    
    	while ( !file.eof() ) 	// Einlesen bis Dateiende
    	{
    		string row;
    		getline(file, row);	// Einlesen einer Zeile
    
    		if ( !row.empty() ) // Falls Zeile nicht leer
    		{
    			istringstream ss(row);		// StringStream zum zerlegen der Zeile
    			string temp;
    
    			getline(ss, temp, ';');		// Ersten Wert bis zum Trennzeichen
    										// einlesen
    
    			do
    			{
    				stringstream convert;	// StringStream für die Konvertierung
    				convert << temp;		// Konvertierung
    				double dtemp;			// des String
    				convert >> dtemp;		// nach double
    				vec.push_back(dtemp);	// und einfügen in den vector
    				temp.clear();			// String leeren
    				getline(ss, temp, ';');	// Nächsten Wert einlesen
    			} while ( !temp.empty() );	// Falls Temp Leer ist, gibt es keine
    		}								// neuen Werte in der aktuellen Zeile
    	}
    	file.close();
    
    	for ( unsigned i=0; i<vec.size(); i++ )
    		cout << vec[i] << " ";
    
    	return 0;
    }
    

    Ausgabe:

    1.12 44.789 987.12 1 2.13 45.79 988.13 2 23.4 3.14 46.791 989.14 3
    


  • Hej,

    tausend dank entlich kann ich weiter an dem Programm arbeiten.
    das ist genau das was ich brauchte!
    🙂
    vielen vielen dank


Anmelden zum Antworten