pobieranie danych z pliku

0

Znalazłem funkcję getline() która pobiera cały wiersz jako string
Ja mam .txt z liczbami całkowitymi każda w nastepnym wierszu
istnieje jakaś funkcja która pobiera int "getint" xd ?

1
#include <string>
#include <iostream>
#include <fstream>

static const std::string filename = "plik.txt";

int main(){
    std::ifstream f;
    f.open(filename);
    if(f.good()){
        for(std::string readed="";f >> readed;){
            int num;
            try{
                num = std::stoi(readed);
            }catch(...){num = 0;}
            std::cout << "read number: " << num << std::endl;
        }
        f.close();
    }

}

1

Nie wiem co chcesz zrobić z pobranymi danymi ale przyjąłem, że zapiszesz je do tablicy

std::fstream file;
file.open("nazwa.txt", std::ios::in);
if (file.good()){
    for (int i = 0; i < arraySize; ++i){
        file >> array[i];
    }
    file.close();
}
1
std::fstream fin;
int tmp;
std::vector<int> nums;
//...
while(fin >> tmp) {
    nums.push_back(tmp);
}
0

ok dzięki skorzystam z rozwiązania 'kyio'
ps. jaką funkcją zliczyć liczbe elementów (każdy w nowej lini)
while(getline(X,values)) k++;
chciałem robić tak ale licznik k działa dobrze tylko po tej funkcji źle zczytuje daje operatorem >>

0

wiem co robię źle funkcja getline przenosi mnie na koniec pliku
wie ktoś jak po zliczeniu linijek funkcją getline "zresetować strumie" zeby zacząć wczytywanie od początku ?

2

http://cpp0x.pl/kursy/Kurs-C++/Poziom-4/Poruszanie-sie-po-pliku-w-trybie-do-odczytu/476
W artykule jest opisane jak poruszać się po pliku.

Odczytując plik do końca, wskaźnik plikowy dojeżdża do końca i sam nie wróci do początku.
Opcje masz dwie. Zamknij i ponownie otwórz plik lub wróć do początku pliku (file.seek(0)).

PS: Korzystając z podrzuconego rozwiązanie z std::vector uwalniasz się ze sprawdzania ilości linii.
Wczytujesz póki da się coś wczytać i dodajesz do tablicy.
Ilość linii to nums.size().

1
std::vector<std::vector<int>> data;
std::string line;
while (std::getline(stream, line)) {
    std::vector<int> rowData;
    std::istringstream rowStream { line };
    int x;
    while (rowStream >> x)
    {
         rowData.push_back(x);
    }
    data.push_back(std::move(rowData));
}

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