Zamysł jest taki aby odczytać z pliku txt linie osobno, to znaczy pierwsza linia pliku tekstowego to ilość zestawów danych, 2 linia to liczba elementów podanych w 3 linii, 3 linia to elementy, 4 linia to liczba elementów podanych w 5 linii, 5 linia to elementy. Chciałbym linie 1,2,4 przechować w zmiennych, natomiast linie 3,5 przechować w tablicy. Stoje w miejscu i nie wiem jak rozwiązać ten problem ponieważ, moja funkcja znajdując się w 3 linii pliku tekstowego pobiera wszystkie liczby do końca. Chciałem to zrobić tak(niestety nie działa,pewnie przez spacje w txt):
for (size_t j = 0; j < size1; j++)
{
v1.push_back(value);
{
//////////////////////////////////////
Mój plik wyjściowo wygląda tak:
1
4
-5 -1 0 8
7
7 9 2 0 -7 2 -5
Wynik dla powyższych danych który otrzymuje to:
line1:1
line2:4
line3: -5 -1 0 8 7 7 9 2 0 -7 2 -5
line4:6422004
line5:
Poprawny wynik dla powyższych danych którego nie otrzymuje:
line1:1
line2:4
line3:-5 -1 0 8
line4:7
line5:7 9 2 0 -7 2 -5
Kod:
void fromFile(std::fstream &myFile)
{
int dataSets, size1, size2, value;
std::vector<int> v1, v2;
string line;
if (myFile.is_open())
{
myFile >> dataSets;
goToLine(myFile, 2);
for (std::size_t i = 0; i < dataSets; ++i)
{
myFile >> size1;
goToLine(myFile, 3);
while (getline(myFile, line))
{
std::istringstream ss(line);
for (size_t j = 0; j < size1; j++)
{
while (ss >> value)
{
v1.push_back(value);
}
}
}
goToLine(myFile, 4);
myFile >> size2;
goToLine(myFile, 5);
while (getline(myFile, line))
{
std::istringstream ss(line);
while (ss >> value)
{
v2.push_back(value);
}
}
}
}
cout << "line1:" << dataSets << endl;
cout << "line2:" << size1 << endl;
cout << "line3: ";
for (size_t i = 0; i < v1.size(); i++)
cout << v1[i] << " ";
cout << endl;
cout << "line4:" << size2 << endl;
cout << "line5: ";
for (size_t i = 0; i < v2.size(); i++)
cout << v2[i] << " ";
}
std::fstream &goToLine(std::fstream &file, unsigned int num)
{
file.seekg(std::ios::beg);
for (int i = 0; i < num - 1; ++i)
{
file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return file;
}