CSV Datei auslesen und in ein Array speichern



  • Hallo zusammen,

    ich habe das Problem, dass beim Auslesen der CSV-Datei ein Fehler auftritt sobald ein leeres Feld auftritt, momentan fülle ich es mit Punkten.

     void Field::scanData()
    {
    	string Datei;
    	vector<vector<char>> raster;
    	vector<char> row;
    
    	////Name der Datei angeben, die eingelesen werden soll
    	cout << "Dateiname eingeben mit .csv am Ende: ";
    	cin >> Datei;
    	system("cls");
    
    	// ifstream zum einlesen der Datei
    	ifstream Daten;
    	//Einlesen der zuvor eingegebenen Datei
    	Daten.open(Datei, ios::in);
    
    
    	if (!Daten) //Kontrolle ob die Datei geöffnet werden konnte
    	{
    		cout << "Datei konnte nicht geoeffnet werden!" << endl << endl;
    		system("PAUSE");
    	}
    	else
    	{
    		/*
    		for( Definition von Variablen; Abbruchbedingung; Irgendwas das nach jedem Schleifendurchgang passiert)
    		Hier ist die Abbruchbedingung file. Einfach nur file ist praktisch das gleiche wie !file.fail()
    		Es wird abgebrochen, wenn über das Ende der Datei hinausgelesen wird.
    		*/
    		for (ifstream file(Datei); file; )
    		{
    			vector<char> row;
    			for (char c, skip;; )
    			{
    				/*
    				Da wir keine Zeilengröße wissen, müssen wir auf Zeilenumbruch testen.
    				Standardmäßig überließt aber der operator>> Whitespaces (Leerzeichen, Zeilenumbrüche, Tabs...).
    				noskipws sagt, er soll keine Whitespaces überlesen, damit wir auf Zeilenumbruch testen können.
    				Nun wird also zuerst ein Zeichen gelesen (o oder s) und dann das nachfolgende Zeichen (; oder \n).
    				Die Schleife soll abbrechen, wenn beim Einlesen ein Fehler auftrat oder wenn das Zeilenende erreicht ist.
    				Ist das nicht der Fall, wird das eingelesene Zeichen im Array abgespeichert (emplace_back).
    				*/
    				if (file >> c)
    					row.emplace_back(c);
    
    				file >> std::noskipws >> skip;
    				if (!file || skip == '\n')
    					break;
    			}
    			// Nun wurde eine Zeile gelesen und diese wird nun auch abgespeichert.
    			raster.emplace_back(row);
    		}
    	}
    
    	for (int y = 0; y < zeile; y++) //Übertragen des Inhalts vom dynamischen Array ins Spielefeld.
    	{
    		for (int x = 0; x < spalte; x++)
    		{
    			if (raster[y][x] == placed)
    			{
    				field[y][x][1] = placed;
    			}
    		}
    		cout << endl;
    	}
    
    	Daten.close();
    	system("cls");
    	cout << "Datei erfolgreich eingelesen!" << endl << endl;
    	system("PAUSE");
    	system("cls");
    
    }
    


  • Alles klar, danke das du uns Bescheid gesagt hast.


  • |  Mod

    @PhatNeezy : Bitte fang endlich an, vernünftige Fragen zu stellen! In jedem deiner Threads kommen (aus gutem Grund) nur so Antworten wie die von TGGC hier. Das hilft weder dir noch uns, ist aber etwas, was nur du ändern kannst.

    Wenn du einfach nur keinen Bock hast und hoffst, dass dir jemand aus Mitleid die Hausaufgaben macht, dann lass es einfach sein, hier zu fragen. Wenn du wirklich etwas lernen möchtest, aber schlicht nicht weißt, wie du zielführend Fragen stellen kannst, dann lies dir diese Beiträge gründlich durch:
    Wie man Fragen richtig stellt
    Du brauchst Hilfe?
    Wie man Probleme nachstellbar und nachvollziehbar macht



  • Tut mir Leid. Nein das verlang ich ja nicht bin schon etwa mit 90% fertig aber Google spuckt bei meinem Problem nichts verständliches aus, hab zusätzlich das Problem dass ich für 7 Fächer lernen muss und nicht viel Zeit bleibt um mich den ganzen Tag damit zu befassen.

    Mein Problem bei dem Code oben ist, dass die Funktion um eine CSV Datei auszulesen, einen Fehler anzeigt sobald ein Feld nicht gefüllt ist. Aus diesen Grund fülle ich es momentan mit Punkten. Möglich wäre ja wenn ein Leerzeichen erkannt wird einfach ein Ersatzzeichen in das Array zu übertragen.


  • |  Mod

    @phatneezy sagte in CSV Datei auslesen und in ein Array speichern:

    Tut mir Leid. Nein das verlang ich ja nicht bin schon etwa mit 90% fertig aber Google spuckt bei meinem Problem nichts verständliches aus, hab zusätzlich das Problem dass ich für 7 Fächer lernen muss und nicht viel Zeit bleibt um mich den ganzen Tag damit zu befassen.

    Mein Problem bei dem Code oben ist, dass die Funktion um eine CSV Datei auszulesen, einen Fehler anzeigt sobald ein Feld nicht gefüllt ist. Aus diesen Grund fülle ich es momentan mit Punkten. Möglich wäre ja wenn ein Leerzeichen erkannt wird einfach ein Ersatzzeichen in das Array zu übertragen.

    Leider ist das nur
    a) Eine ausweichende Antwort, warum du nicht willig bist, brauchbare Problembeschreibungen zu liefern
    b) Eine nahezu exakte Wiederholung deiner ersten, untauglichen Problembeschreibung

    Ich habe dir gesagt, wieso dir niemand hilft, und was du dagegen tun kannst. Da du dies komplett ignoriert hast (nicht nur hier, sondern in allen dienen Threads), hast eindeutig klar gemacht, dass du keine Hilfe möchtest.



  • @seppj
    Habe die erwähnten Themen oder Threads kurz gesammelt und chronologisch geordnet 😇 :

    1. Schiffe versenken programmieren
    2. CSV auslesen und in einem 2D Array speichern
    3. Ein statischer Memberverweis muss relativ zu einem bestimmten Objekt sein ?!?!?!?!?!
    4. 2D array abscannen
    5. CSV Datei auslesen und in ein Array speichern

    Dann fand ich noch:

    Vielleicht hilft es für eine bessere Problembeschreibung.


Anmelden zum Antworten