Ostatnia linia z CSV źle się wczytuje

0

Mam taki problem, że wczytuje linie z pliku CSV, wrzucam to do vectora, ale po ostatniej wczytanej linii, następuje nowa iteracja i wyskakuje mi:

exception: std::invalid_argument at memory location 0x00BBD990.

Chodzi o to, że w "line" siedzi NULL i nie skonwertuje się na float? Czemu w takim razie pętla while nie zatrzymuje się skoro getline() zwróciło NULL?

vector<float> ReadFromFile(const string& path)
{
	ifstream file(path);
	if (!file)
	{
		throw runtime_error("Error with opening file. Check path or filename.");
	}
	else
	{
		string line;
		vector<float> myvec;
		float a = 0;
		while (getline(file, line,','))
		{
			a = stof(line); //<- debbuger wskazuje na ta linie
			myvec.push_back(a);
		}
		file.close();
		for (auto x : myvec) // tutaj chcialem sprawdzic czy mi wypisze w ogole, usune jak wszystko bedzie dzialac
			cout << x << endl;

		return myvec;
	}
}

Tak wygląda CSV(100 linii):

1.63395160885246,
0.333340160703911,
0.910285099833405,
0.38090163952713,
1.364455789963,
1.19096877760765,
1.46584629894506,
0.582908740538596,
1.19025563504093,
0.819379689553464,

Tak btw, można jakoś usprawnić kod? Np przy użyciu iteratorów?

Z góry dzięki za pomoc ;-)

1
  1. nie potrzebujesz else, przeciez jezeli wejdzie w tamtego ifa to masz rzucany wyjatek i nigdy wiecej kodu sie nie wykona
  std::ifstream is(path);
  std::istream_iterator<float> start(is), end;
  std::vector<float> numbers(start, end);

wraz z https://stackoverflow.com/questions/10376199/how-can-i-use-non-default-delimiters-when-reading-a-text-file-with-stdfstream
powinno zadzialać jezeli chcesz na iteratorach

  1. zobacz co dostajesz w line pod debuggerem. Pewnie line jest pusta linia (np enterem). Wtedy musisz to normalnie obsluzyc (np trimowac wejscie lini i jezeli nadl jest rozna od 0 (dlugosc) to wtedy parsowac)

1 użytkowników online, w tym zalogowanych: 0, gości: 1