Wczytywanie danych z pliku

Wczytywanie danych z pliku
TA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:37
0

Witam mam pytanie bo sam już się gubię... Szukałem na cpp0x i w google i znalazłem kilka rzeczy ale części zupełnie nie rozumiem a jedna którą zrozumiałem nie działa... Mam przykładowy plik txt o następującej zawartości:
2016-10-07 4859 14 Silos IX

Jest podobnych linijek ok 200stu. I teraz pytanie jak mam wczytac zawartosc do osobnych zmiennych z vectrora?

Przykladowo tworze 7 wektorów, rok, miesiąc, dzień, waga, numer_dost, cel, (opcjonalnie) numer_cel. Teraz muszę wczytac wszystkie linijki do tych wektorów...

Ale nie mam pojęcia jak rozpocząć pobieranie danych tak żebym mógł wyznaczyć miejsce przeznaczenia + żeby po tych spacjach i - przenosiło się do następnej zmiennej.

Prosiłbym o wyrozumiałość ponad 3 godziny szukam sam dopiero teraz jak już wątpię czy sobie poradzę proszę was o pomoc.

edytowany 1x, ostatnio: TenAnonim
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Lokalizacja:Szczecin
1

Nie lepiej użyć jednego wektora struktur?

Kopiuj
struct whatever
{
    std::string date;
    int unknown1;
    int unknown2;
    std::string silos;
    std::string unknown3;
};

auto main() -> int
{
    std::vector<whatever> whatevers;
    std::ifstream file("whatevers.txt");
    std::string line;
    while(std::getline(std::cin, line)) {
        std::stringstream ss{line};
        whatever w;
        ss >> w.date >> w.unknown1 >> w.unknown2 >> w.silos >> w.unknown3;
        whatevers.push_back(w);
    }
}

Coś takiego. Pisane z palca, więc mogą być błędy.


edytowany 1x, ostatnio: kq
TA
Hmm a potem zgaduje ze date po prostu podzielic, ok zobaczę co mi wyjdzie dzięki.
kq
Nie doczytałem, że chcesz datę dzielić. Tak, to powinno być proste.
Sunnydev
jak się mówi na funkcje w których używamy tego operatora strzałki ->? bo nie wiem czy jest polski odpowiednik (a nawet po angielsku nie jestem pewien jak je nazywać), a póki co wiem tyle, że to alternative function syntax i tyle :D Czy jest sens w używaniu ich jeśli nie ma nigdzie decltype?
kq
trailing return type, nie ma sensu - ale to przykład z palca na forum to można się zabawić ;​) I jest formalnie poprawne
Sunnydev
nie no jasne, bo to w zasadzie to samo co int main(), tylko jak pierwszy raz to zobaczyłem, to się nawet wystraszyłem, bo myślałem, że to przeciążony operator dostępu, który próbuje się dostać do jakiegoś typu danych (sayy whaat). trailing return type... o jezu XD lektura się szykuje :)
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:4 minuty
2
Kopiuj
struct Trasport
{
    std::time_t date;
    double weight;
    std::string address;
};

auto load(std::istream& input) -> std::vector<Trasport>
{
    std::vector<Trasport> result;
    std::string line;
    while(std::getline(input, line)) {
        std::stringstream ss{line};
        Trasport trans;
        std::tm t;
        if ((ss >> std::get_time("%Y-%m-%d") >> trans.weight)
            && std::getline(ss >> std::ws, trans.address)) {
            trans.date = std::mktime(t);
            result.push_back(trans);
        } else {
           std::cerr << "Failed to read: " << line << '\n';
        }
    }
    return result;
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22
kq
Linijka 16 wydaje się lekko przekombinowana :​)
MarekR22
fakt za długa, teraz jest lepiej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.