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: 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 |
|
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) |
|
Luq |
» 2017-10-01 16:10:46 std::ifstream plik; std::string login, haslo;
std::getline( plik, login, ':' ); std::getline( plik, haslo );
|
|
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: 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 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 |
|
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' ); |
|
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 |
|
« 1 » |