while schleife bis leere-zeile ?!?
-
Hallo ich habe ein Problem...
ich möchte aus einer Txt-Datei die Werte in ein Array schreiben.
Meine Txt-Datei sieht folgender maßen aus:1
1.5
1
1
23
04
2010
22
2
1
1
27
04
2010
1
28
04
2010
23
1
1
1
3
04
2011
1
...uswJede Zeile soll in ein Array geschrieben werden... das ist auch noch kein Problem. Das Problem ist, dass bei einer Leerzeile die nächsten Werte in ein anderes Array geschrieben werden sollen.
Ich bekomme es einfach nicht hin.Die Textdatei soll in folgende Variablen gelesen werden.
1 <-- array[0][0];
1.5 <-- array[0][1];
1 <-- array[0][2];
1 <-- array[0][3];
23 <-- array[0][4];
04 <-- array[0][5];
2010 <-- array[0][6];
2 <-- array[0][7];
<-- leerzeile
2 <-- array[1][0];
2 <-- array[1][1];
1 <-- array[1][2];
1 <-- array[1][3];
27 <-- array[1][4];
04 <-- array[1][5];
2010 <-- array[1][6];
1 <-- array[1][7];
28 <-- array[1][8];
04 <-- array[1][9];
2010 <-- array[1][10];
2 <-- array[1][11];
<-- Leerzeile
3 <-- array[2][0];
1 <-- array[2][1];
1 <-- array[2][2];
1 <-- array[2][3];
3 <-- array[2][4];
04 <-- array[2][5];
2011 <-- array[2][6];
1 <-- array[2][7];
<-- Leerzeile
...uswIch hab schon alles mögliche mit Schleifen probiert, bekomme es einfach nicht hin.
Ich wär über eine Lösung sehr dankbar. Das array ist ein integer mit[100][200] Variablen.Danke und Gruß
-
Wahrscheinlich hast du eine Funktion geschrieben, die die nächste Zeile aus der Datei liest (wenn nicht, solltest du). Auf welche Weise liest diese Funktion die Zeile? Davon abhängig ist, wie man eine leere Zeile erkennen kann. Zeig uns diese Funktion.
-
So könnte es gehen:
#include <iostream> #include <fstream> #include <string> const int MAX_X = 100; const int MAX_Y = 200; double Array[MAX_X][MAX_Y]; // Achtung: Array-Werte sind nur so bereits auf 0 gesetzt! Wichtig für die If-Abfrage! int main() { std::ifstream inFile("Eingabe.txt"); if (!inFile.good()) { std::cerr << "Datei konnte nicht geoffnet werden!\n"; return 1; } size_t x = 0; size_t y = 0; while (!inFile.eof()) { std::string lineBuf; std::getline(inFile, lineBuf); if (lineBuf.empty()) { ++x; y = 0; } else { Array[x][y++] = atof(lineBuf.c_str()); } } inFile.close(); for (size_t x = 0; x < MAX_X; ++x) { for (size_t y = 0; y < MAX_Y; ++y) { double val = Array[x][y]; if (val > 0) { std::cout << x << "," << y << " = " << val << std::endl; } } } }
Ausgabe:
0,0 = 1
0,1 = 1.5
0,2 = 1
0,3 = 1
0,4 = 23
0,5 = 4
0,6 = 2010
0,7 = 2
1,0 = 2
1,1 = 2
1,2 = 1
1,3 = 1
1,4 = 27
1,5 = 4
1,6 = 2010
1,7 = 1
1,8 = 28
1,9 = 4
1,10 = 2010
1,11 = 2
2,0 = 3
2,1 = 1
2,2 = 1
2,3 = 1
2,4 = 3
2,5 = 4
2,6 = 2011
2,7 = 1Noch ein Hinweis: Du hast in deinem Ausgangscode für dein Array int angenommen.
Da es sich aber um Dezimalzahlen handelt musst du ein Datentyp wählen, der Dezimalzahlen unterstützt.
-
Oh, war ja im C-Forum, tut mir leid. Die Vorgehensweise sollte aber identisch sein. Liegt dann jetzt an dir