Wczytywanie z pliku danych ze spacją do jednej zmiennej.

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.

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::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.

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.

0

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

0

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

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.

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