Dane (rekordy) z pliku .txt do rekordów (struct)

0

Zapisać dane można na wiele sposobów (jedno pole w jednej linii, oddzielone przecinkami / średnikami jak w CSV...). Co polecacie, jakie rozwiązanie żeby wczytywać dane z pliku txt do rekordu typu struct:

Imie
Nazwisko
Data urodzenia
Pensja

Jak elegancko i efektywnie wczytywać / zapisywać dane tego typu? Czy jest możliwość (nie wiem jak to nazwać) "zrzutu" rekordu (struct) do pliku tekstowego? (podobnie jak obiekty się serializuje (?) do pliku JSON).

Kod mam napisać korzystając z biblioteki standardowej C++ (działamy w Code Blocks).

Muszę też jakoś zapanować nad ew. błędami i sprawdzić czy dane wczytywane są poprawne.

1

Jeśli możesz używać boosta to Boost.PropertyTree pozwala łatwo serializować do/z xml i json. W przeciwnym razie proponowałbym CSV, bo ten format jest trywialny.

0

Zależy jakie mają byc dane, jak chcesz się do nich dostawać ect. Może być plik tekstowy, prosty csv, bądź xml. Może być coś bardziej zagmatwanego np binarnie iff (fajny pojemny i prosty format), bezpośredni zrzut struktury do pliku to proszenie się o kłopoty (problem endianów, wyrównań, wielkości zmiennych kontroli poprawności danych)...

0

Jeśli w danych nie masz spacji/znaków białych ani pustych napisów, a każdy rekord jest tej samej struktury i liczby składowych, to spacje mogą służyć za separator pól (a entery za separator rekordów) i wtedy możesz zapisywać i odczytywać używając po prostu << oraz >>. Zaletą tego rozwiązania jest format, który jest też human-readable.

Z drugiej strony, gdy powyższe warunki są niespełnialne, można (zachowując czytelność formatu dla człowieka) użyć dowolnych znaków (niewystępujących w danych) na separatory danych/rekordów i do doczytu używać getline z podanym znakiem kończącym daną.

Oczywiście to wszystko po to, by format był human-readable -- co okazuje się często ważniejsze, niż się zakłada...

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