Witam, mam zadanie polegające na wczytaniu danych z pewnego pliku w takim formacie (przykład) :
plik1:
Kowalski Adam Piotr 123454
Kowalska Anna 234567
"Kowalski" i "Kowalska" mają zostać wczytane z pliku do zmiennej nazwisko czyli: plik1 >> nazwisko po prostu.
Natomiast "Adam Piotr" i "Anna" mają zostać wczytane do jednej zmiennej imiona, a między wyrazami w "Adam Piotr" występuje spacja, więc nie wiem jak ułożyć kod, żeby to wczytać. Probowałam użyć funkcji "find" z argumentem spacji, ale niestety mi nie wychodzi, jak i getline w takim formacie:
getline( plik1, imiona, '[0-9]' ) ale tu też wyskakują błędy. Bardzo proszę o podpowiedź w zadaniu.
Missya122 napisał(a):
Witam, mam zadanie polegające na wczytaniu danych z pewnego pliku w takim formacie (przykład) :
plik1:
Kowalski Adam Piotr 123454
Kowalska Anna 234567
"Kowalski" i "Kowalska" mają zostać wczytane z pliku do zmiennej nazwisko czyli: plik1 >> nazwisko po prostu.
Natomiast "Adam Piotr" i "Anna" mają zostać wczytane do jednej zmiennej imiona, a między wyrazami w "Adam Piotr" występuje spacja, więc nie wiem jak ułożyć kod, żeby to wczytać. Probowałam użyć funkcji "find" z argumentem spacji, ale niestety mi nie wychodzi, jak i getline w takim formacie:
getline( plik1, imiona, '[0-9]' ) ale tu też wyskakują błędy. Bardzo proszę o podpowiedź w zadaniu.
Wczytaj linijkę do stringa przy użyciu getline().
Poszukaj pierwszej spacji przy użyciu std::find_first_of().
Skopiuj poszukaj ostatniej spacji przy użyciu std::find_last_of()
Masz teraz 2 pozycje, to co pomiędzy nimi możesz skopiować do zmiennej "imiona"
Fragment od 0 do pozycji pierwszej spacji to nazwisko.
Fragment od pozycji drugiej spacji do końca do numer.
optional<Person> read_person(const string& str)
{
if (auto pos = str.find_first_of(' '); pos != str.npos) {
Person p;
p.surname = str.substr(0, pos);
auto start = pos + 1;
pos = str.find_first_of("0123456789", start);
if (pos != str.npos) {
p.names = str.substr(start, pos - start - 1);
p.id = str.substr(pos);
return p;
}
}
return {};
}
E: W sumie to jeszcze przydałoby się na samym wstępie wyciąć białe znaki z początku i końca stringa.
A może przy zapisie do pliku wpiszesz najpierw numer?
Wtedy żadnych problemów z wczytywaniem.
Układ linijek w plikach do wczytania i zapisu mam z góry narzucony i nie mogę zmienić.
A jeżeli nie metody klasy string to wczytywanie znak po znaku z pliku do pojawienia się cyfry, usunięcie ostatniej wczytanej spacji ze string'a, wczytanie inta, przejście do kolejnej linii.