Wczytywanie z pliku danych ze spacją do jednej zmiennej.

Odpowiedz Nowy wątek
2019-09-10 16:06
0

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.

A co z tymi cyframi? - lion137 2019-09-10 16:34

Pozostało 580 znaków

2019-09-10 16:32
3
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::string::find_first_of().
Skopiuj poszukaj ostatniej spacji przy użyciu std::string::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.

Pozostało 580 znaków

2019-09-10 16:35
1

string::find_first_of

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.

edytowany 1x, ostatnio: tajny_agent, 2019-09-10 16:50
nie słyszałeś o std::string::find_last_of() ? - _13th_Dragon 2019-09-10 17:15
Słyszałem, ale jakoś nie pomyślałem. - tajny_agent 2019-09-10 17:31

Pozostało 580 znaków

2019-09-10 17:14
0

A może przy zapisie do pliku wpiszesz najpierw numer?
Wtedy żadnych problemów z wczytywaniem.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2019-09-10 18:07
0

Układ linijek w plikach do wczytania i zapisu mam z góry narzucony i nie mogę zmienić.

Pozostało 580 znaków

2019-09-11 14:32
0

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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0