Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

kod asci pobieranie znaku nowej lini (buildier c++)

Ostatnio zmodyfikowano 2015-09-02 21:03
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
kod asci pobieranie znaku nowej lini (buildier c++)
» 2015-09-02 17:25:54
witam plik wczytywany wygląda tak :

rozdział,paragraf,bz,kwota
75647,6060,,37.81
75647,4300,,757.92
75647,6060,,945.42
75647,4300,,478.74
75095,4300,,872.21
75095,4750,,377.50
75095,4300,,683.36
75095,4550,,254.04

chcę pobrać pierwsze rekordy tego pliku do wektora (proszę wziąć pod uwagę że to nie jest końcowa wersja kodu) :

C/C++
try
{
    fstream plik;
    plik.open( "D:\\data1.csv" );
    vector < string > wek1;
    if( plik.good() )
    {
       
        char napis;
        cout << "Zawartosc pliku:" << endl;
        string string_tmp;
        int zmienna_petli = 0;
        while( !plik.eof() )
        {
           
           
            plik >> napis;
           
            if( napis == 44 || napis == 13 || napis == 10 )
            {
                zmienna_petli++;
                wek1.push_back( string_tmp );
            }
            if( zmienna_petli == 3 )
                 zmienna_petli = 0;
           
            if( zmienna_petli == 0 )
            {
               
                string_tmp += napis;
               
            }
           
           
        }
       
       
        Tresc->Text =( string_tmp.c_str() );
        for( int i = 0; i <( int ) wek1.size(); i++ )
       
             Wynik1->Text = wek1[ i ].c_str();
       
        plik.close();
        ShowMessage( "udało sie" );
    } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl;
   
}



problem polega na tym że program nie umieszcza w wektorze tego co bym chciał ponieważ wydaje mi się  że nie rozpoznaje znaku nowej linii a w ASCI jest to 10 lub 13
gdy zrobie tak :


rozdział,paragraf,bz,kwota
75647,6060,,37.81,
75647,4300,,757.92,
75647,6060,,945.42,
75647,4300,,478.74,
75095,4300,,872.21,
75095,4750,,377.50,
75095,4300,,683.36,
75095,4550,,254.04,


i zmienię część kodu
C/C++
if( zmienna_petli == 3 )
     zmienna_petli = 0;

na
C/C++
if( zmienna_petli == 4 )
     zmienna_petli = 0;

to wszystko działa okej proszę o pomoc
P-137161
pekfos
» 2015-09-02 17:40:16
Zainteresuj się funkcją getline().
P-137162
aaadam
Temat założony przez niniejszego użytkownika
» 2015-09-02 17:57:56
wiem, że mogę tą funkcją ale nie lepiej działać na strumieniu ?
P-137164
pekfos
» 2015-09-02 19:22:19
wiem, że mogę tą funkcją ale nie lepiej działać na strumieniu ?
Co..? A ta funkcja co niby robi?
P-137173
aaadam
Temat założony przez niniejszego użytkownika
» 2015-09-02 19:32:45
getline() pobiera daną linie z pliku o ile mi wiadomo.
A wolę pobierać znak po znaku.
P-137176
pekfos
» 2015-09-02 19:38:39
A wolę pobierać znak po znaku.
Po co? 'O ile tobie wiadomo' brzmi niewystarczająco.
P-137178
aaadam
Temat założony przez niniejszego użytkownika
» 2015-09-02 20:19:42
jeżeli będę pobierał w ten sposób :
C/C++
plik.open( "D:\\data1.csv" );

if( plik.good() )
{
   
    char napis;
   
   
   
    while( !plik.eof() )
    {
       
       
        plik >> napis;
        .
        .
        .
        .
        .

to będę pobierał znak po znaku i taka wersja mi bardziej pasuje, tylko nie wiem czemu nie odczytuje mi końca linii
poprostu jak mam plik :

75647,6060,1,37.81
75647,4300,2,757.92
75647,6060,3,945.42
75647,4300,4,478.74
75095,4300,5,872.21
75095,4750,6,377.50

to chce pobrać te wartości oddzielone przecinkami do wektorów lub jakiś pojemników z tym, że nie wykrywa mi znaku końca linii.
Wektory powinny wyglądać tak :
wek1 [ 75647,75647,75647,75647,75095,75095]   1 kolumna
wek2 [ 6060 ,4300,6060,4300,4300,4750]        2 kolumna
itd
P-137190
pekfos
» 2015-09-02 20:35:55
C/C++
plik.get( napis );
Zamiast operatora >>.
P-137193
« 1 » 2
  Strona 1 z 2 Następna strona