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

Wczytywanie danych z pliku i ich edycja

Ostatnio zmodyfikowano 2013-01-19 15:15
Autor Wiadomość
akcza
Temat założony przez niniejszego użytkownika
Wczytywanie danych z pliku i ich edycja
» 2013-01-19 13:00:16
Witam,
chcę napisać sobie program pytający mnie słówek z angielskiego. Jednak mam mały problem z wczytaniem danych z pliku.

Struktura pliku:

gotowka|cash|
zamozny|well off|
wyplacac|take out|
w trudnej sytuacji materialnej|hard up|
wplacac|pay in|
tani|cheap|

Kod programu:
C/C++
#include <iostream>
#include <fstream>

using namespace std;

string slowka[ 100 ][ 1 ];
int liczba_slowek = 0;
string nazwa_slownika = "slownik.txt";

void obrobka( string wiersz, int nr_slowka ) //wyciaga z wiersza pojedyncze elementy odzielone
{ // separatorem "|"
    string tmp, s1;
    int i2, i1, nr;
    tmp = "";
    s1 = "";
    nr = nr_slowka;
    for( i2 = 0; i2 < 2; i2++ )
    {
        tmp = wiersz.substr( wiersz.find( "|" ) + 1 );
        s1 = wiersz.erase( wiersz.find( "|" ), wiersz.length() );
        slowka[ nr ][ i2 ] = s1;
        wiersz = tmp;
    }
}


void wczytaj_slownik() //wczytuje slowka i wywoluje funkcje obrob, zapisuje
{ //slowka do tablicy slowka[0][0]
    fstream slownik;
    slownik.open( nazwa_slownika.c_str(), ios::in | ios::out );
    string dane = "";
    int i = 0;
    while( getline( slownik, dane ) )
    {
        obrobka( dane, i );
        i = i + 1;
    }
    liczba_slowek = i;
   
}


int main( int argc, char * argv[] ) {
   
    wczytaj_slownik();
    int i, i1;
   
    for( i = 0; i < liczba_slowek; i++ )
    {
        for( i1 = 0; i1 < 2; i1++ )
        {
            cout << slowka[ i ][ i1 ] << endl;
        }
    }
    return 0;
}

Małe objaśnienie kodu:
wczytaj_slownik() - zawiera pętle, w której każdy wiersz przesyła do funkcji obróbka(), która ma za zadanie "wyciągnąć" dane z wiersza.
Dla podanego pliku tekstowego, tablica slowka powinna wygladac tak:
C/C++
slowka[ 0 ][ 0 ] = gotowka
slowka[ 0 ][ 1 ] = cash
slowka[ 1 ][ 0 ] = zamozny
slowka[ 1 ][ 1 ] = well off
slowka[ 2 ][ 0 ] = wyplacac
slowka[ 2 ][ 1 ] = take out
slowka[ 3 ][ 0 ] = w trudnej sytuacji materialnej
slowka[ 3 ][ 1 ] = hard up
slowka[ 4 ][ 0 ] = wplacac
slowka[ 4 ][ 1 ] = pay in
slowka[ 5 ][ 0 ] = tani
slowka[ 5 ][ 1 ] = cheap
A wyglada tak:
C/C++
slowka[ 0 ][ 0 ] = gotowka
slowka[ 0 ][ 1 ] = zamozny
slowka[ 1 ][ 0 ] = zamozny
slowka[ 1 ][ 1 ] = wyplacac
slowka[ 2 ][ 0 ] = wyplacac
slowka[ 2 ][ 1 ] = w trudnej sytuacji materialnej
slowka[ 3 ][ 0 ] = w trudnej sytuacji materialnej
slowka[ 3 ][ 1 ] = wplacac
slowka[ 4 ][ 0 ] = wplacac
slowka[ 4 ][ 1 ] = tani
slowka[ 5 ][ 0 ] = tani
slowka[ 5 ][ 1 ] = cheap

Siedzę nad tym już drugą godzinę, wszystko (w sumie skoro nie działa to nie wszystko :D ) już sprawdziłem, a to nadal nie działa. Z góry dzięki za pomoc!
P-74388
kubawal
» 2013-01-19 14:13:03
Daj errory.

Czy tablica slowka nie powinna być zdefiniowana jako
string slowka[ 100 ][ 2 ];
 ?
P-74394
akcza
Temat założony przez niniejszego użytkownika
» 2013-01-19 14:52:43
Errory? Chodzi o błędy w kompilowaniu? Żadnych nie ma, wszystko ładnie się kompiluje, tylko słowka w tablicy są źle "poukładane".

Tablica slowka, ma tylko dwa elementy (słowko po polsku i po angielsku), wiec slowka[100][1] powinno starczyc...
Jakieś pomysły? :)

#EDIT
Jednak trzeba było dać slowka[100][2], ale czemu...

Dzięki za pomoc!
P-74398
Wasilek
» 2013-01-19 15:15:03
A no dlatego, że tutaj określasz rozmiar tablicy (100*2), a odwoływanie się do poszczególnych elementów zaczyna się od 0 :)
P-74400
« 1 »
  Strona 1 z 1