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

Wczytanie danych z pliku oraz usunięcie przecinków.

Ostatnio zmodyfikowano 2009-01-22 12:23
Autor Wiadomość
snake_yaro
Temat założony przez niniejszego użytkownika
Wczytanie danych z pliku oraz usunięcie przecinków.
» 2009-01-21 15:44:01
Mamy plik
imiona.txt
. W nim znajdują się dane użytkowników przedstawione w następujący sposób:

C/C++
imie, nazwisko, nr,
imie2, nazwisko, nr2,
imie3, nazwisko, nr3,

Zadaniem jest wczytanie tych danych z pliku do tablicy bez przecinków.

Stowrzyłem stukturę i moduł wczytywania danych do tablicy:

C/C++
const int MAX = 50;

struct STOsoba // struktura osoby
{
    char imie[ MAX ], nazwisko[ MAX ];
    char indeks;
};

int main()
{
   
    int ilosc, z = 0;
   
    STOsoba tablica[ MAX ];
   
    fstream plik;
   
    plik.open( "imiona1.txt", ifstream::in );
    if( !plik )
    {
        cerr << "Blad otwarcia pliku!" << endl;
    }
   
    while( !plik.eof() )
    {
        for( int i = 0; i < ilosc; i++ )
        {
            plik >> tablica[ i ].imie >> tablica[ i ].nazwisko >> tablica[ i ].nr;
        }
    }
    plik.close();
   
    wyswietlanie( tablica, ilosc ); // wyswietlanie zawartosci bazy (opisane ponizej)
}

Ponadto użyłem funkcji wyświetlania zawartości bazy:

C/C++
void wyswietldane( STOsoba osoba )
{
    cout << "  " << osoba.imie << "  " << osoba.nazwisko << "  " << osoba.indeks << "  " << endl;
}

void wyswietlanie( STOsoba tab[], int ilosc )
{
    for( int i = 0; i < ilosc; i++ )
    {
        wyswietldane( tab[ i ] );
    }
}

Natomiast żeby dobrze zapisać dane z pliku do bazy potrzebuję usunąć te przecinki, gdyż jest to niezbędne do sortowania, które nastąpi po poprawnym wczytaniu. 

Krótko, jak usunąć przecinki, aby poprawnie przygotować dane do sortowania?



P-3832
DejaVu
» 2009-01-21 17:56:29
Na samym początku trzeba zacząć od tego, że źle wczytujesz dane. Przykładowe dane:
imie,nazwisko,cośtam
to,ja,1312313
Twój algorytm wczytywania danych odczyta, że:
C/C++
obiekt.imie = "imie,nazwisko,cośtam";
obiekt.nazwisko = "to,ja,1312313";
Powód jest bardzo prosty: plik>>imie; wczyta tekst do napotkania białego znaku, a co za tym idzie program nie będzie działał prawidłowo.

Jeśli masz taki format pliku proponuję dane wczytwać tak:
C/C++
std::string wiersz;
getline( plik, wiersz );
Następnie pętlą szukałbym przecinków i zliczał ile przecinków już wczytałem w danym wierszu. Na podstawie aktualnego stanu napotkanych przecinków będziesz mógł stwierdzić w jakiej zmiennej powinny się znaleźć dane.

Koniec wywodu.
P-3834
pekfos
» 2009-01-22 12:23:25
ja bym tak to zrobił:
C/C++
//...
fstream plik;
char bufor[ 1024 ];
string bufor2;
//..
plik.getline( bufor, 1024, ',' ); //wczytuje do przecinka
/..
bufor2 = "";
for( int a = 0; a < plik.gcount(); a++ ) bufor2 += bufor[ a ];
//osoba.imie = bufor2;
//..
i masz bez przecinków
P-3843
« 1 »
  Strona 1 z 1