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 ?
#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();
}
}
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();
}
std::fstream fin;
int tmp;
std::vector<int> nums;
//...
while(fin >> tmp) {
nums.push_back(tmp);
}
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 >>
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 ?
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()
.
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));
}