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

Odczyt z pliku

Ostatnio zmodyfikowano 2017-10-01 17:35
Autor Wiadomość
DinapeS
Temat założony przez niniejszego użytkownika
Odczyt z pliku
» 2017-10-01 15:31:04
Witam, jestem w trakcie uczenia się podstaw Cpp i natrafiłem na problem, którego sam nie jestem w stanie rozwiązać.
Chodzi o to, że załóżmy mam taki program:

Rejestracja -> Zapisuje login (string login) i hasło (string haslo) do pliku tekstowego .txt w takim formacie:
     login:hasło
     login:hasło
     itd...
i jak teraz zrobić, aby program przy odczytywaniu z pliku (podczas logowania) wczytywał pierwszą część 'login' i zapisywał ją do zmiennej, znak " : " pomijał, i 'hasło' wprowadzał do kolejnej zmiennej?

Kod zapisujący:
C/C++
void rejestracja()
{
    string login, haslo;
    cout << "Wprowadz login: ";
    cin >> login;
    cout << "Wprowadz haslo: ";
    cin >> haslo;
   
    fstream f_rejestracja;
    f_rejestracja.open( "konta.txt", ios::out | ios: app );
    f_rejestracja << login << ":" << haslo << endl;
    f_rejestracja.close();
}
I plik .txt wygląda np. tak:

marek:12345
piotr:razdwa
ania:1a2b

I jak teraz zrobić aby odczytywało login (marek,piotr lub ania) i haslo (12345,razdwa lub 1a2b) do osobnych zmiennych?

Proszę o wyrozumiałość i z góry dziękuje za pomoc, Pozdrawiam
P-165381
maly7
» 2017-10-01 15:42:59
Pobieraj cały ciąg do stringa, następnie znajdź znak ':' (metoda find) i znając pozycję znaku ':' podziel cały pobrany string na dwa stringi login i hasło (substr)
P-165382
Luq
» 2017-10-01 16:10:46
C/C++
std::ifstream plik;
std::string login, haslo;

std::getline( plik, login, ':' );
std::getline( plik, haslo );
P-165383
DinapeS
Temat założony przez niniejszego użytkownika
» 2017-10-01 17:12:18
Dziękuje za waszą pomoc, skorzystałem na razie z tej drugiej opcji tj:
C/C++
std::ifstream plik;
std::string login, haslo;

std::getline( plik, login, ':' );
std::getline( plik, haslo );

I wszystko działa tak jak należy, tylko chciałbym się dopytać, w jaki sposób przejść do następnego wiersza w pliku .txt, bo gdy używam poniższego kodu, to odczyt się psuje :/
konta.txt
login1:haslo1
login2:haslo2
login3:haslo3
login4:haslo4
login5:haslo5

C/C++
void lista_kont()
{
    string login;
    int licznik = 1;
    fstream f_rejestracja;
    f_rejestracja.open( "konta.txt", ios::in );
    while( !f_rejestracja.eof() )
    {
        getline( f_rejestracja, login, ':' );
        cout << licznik << ". " << login << endl;
        licznik++;
    }
}

I zamiast:
1. login1
2. login2
3. login3
4. login4
5. login5

Wyświetla się:
1. login1
2. haslo1
login2
3. haslo2
login3
4. haslo3
login4
5. haslo4
login5
6. haslo5

Wydaje mi się, że chyba mam coś źle w warunku pętli?
Proszę o sprawdzenie
P-165384
maly7
» 2017-10-01 17:30:34
Jest ok, ale wczytujesz dane do znaku ':' i później musisz pobrać/wyrzucić jeszcze dane do końca linii. Za linijką z getline możesz wstawić metodę ignore, aby pominąć znaki do wystąpienia znaku nowej linii:
f_rejestracja.ignore( 999, '\n' );
P-165385
DinapeS
Temat założony przez niniejszego użytkownika
» 2017-10-01 17:35:32
Faktycznie, teraz wszystko działa :)
Bardzo dziękuje za pomoc
P-165386
« 1 »
  Strona 1 z 1