Witam wszystkich, mój problem polega na wczytaniu punktów 3D z pliku CSV.
Punkty mam zapisane w prosty sposób, np:
0,34;0,24;0,78 <- pierwszy punkt
0,24;0,12;0,87 <-drugi punkt
0,25;0,90;0,12 <-trzeci punkt
itd.
Dane te chciałbym wczytać za pomocą strumienia.
Zaczynam wiec od liczenia linijek (ponieważ tyle ile linijek, to tyle posiadam punktów do wczytania) i tutaj się już zaczyna coś dziwnego, a mianowicie zawsze jest jedna dodatkowa linijka pusta. Nie mam pojęcia od czego się bierze.
No, ale kij z tym, bo po prostu sobie robię dynamiczna tablice o wymiarach [ilosc linijek - 1].
No i zaczynam zabawe czyli wczytywanie danych. No i kij bombki strzelił. Nie wczytuje.. Dlaczego? Nie wiem.
Ale po kilku godzinach różnych prób zorientowałem się, że gdybym wczytywał dane bez ostatniej pustej linijki to dane się normalnie wczytują..
Jak to obejść? Muszę sprawdzić ostatni znak pliku i jeżeli istnieje pusta linijka to muszę ją usuwać, czy jest jakiś inny sposób?
Oto mój kod:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
struct point_t
{
double x, y, z;
};
int main()
{
fstream plik;
plik.open( "plik1.csv", std::ios::in );
if( plik.good() == true )
{
cout << "Uzyskano dostep do pliku!\n";
}
else
{
cout << "Blad dostepu do pliku!\n";
}
plik.seekg( 0 );
string line;
int number_of_lines = 0;
while( !plik.eof() )
{
getline( plik, line );
number_of_lines++;
}
point_t * tablica;
tablica = new point_t[ number_of_lines - 1 ];
plik.seekg( 0 );
for( int i = 0; i < number_of_lines - 1; i++ )
{
plik >> tablica[ i ].x;
plik.seekg( 1, ios::cur );
plik >> tablica[ i ].y;
plik.seekg( 1, ios::cur );
plik >> tablica[ i ].z;
}
for( int i = 0; i < number_of_lines - 1; i++ )
{
cout << tablica[ i ].x << " " << tablica[ i ].y << " " << tablica[ i ].z << endl;
}
system( "pause" );
}