Какой самый простой (самый простой) способ определить, когда вы достигаете конца строки данных во время чтения из обычного текстового файла, используя ifstream? В основном мне нужно делать разные вещи с данными, основанными на его местоположении (измеряется номером строки) в текстовом файле.
Поэтому, если у меня есть текстовый файл со следующим содержимым:
12 54 873 9 87 23
34 25 93 10 94 5 8
первая строка, которую я могу захотеть сохранить, но вторую строку, которую мне нужно изменить перед сохранением, или удалить или выполнить другую операцию.
Прямое чтение файла выглядит примерно так:
while (inFile >> temp)
//store temp;
РЕДАКТИРОВАТЬ:
Я еще не тестировал это, укусил его, что я придумал. Я не много делал с более сложными функциями класса строк, поэтому мой синтаксис может быть неправильным, но похоже ли, что я на правильном пути?
// include the necessary libraries
string line, delim = ' ';
ifstream inFile;
int temp, lineNum = 1;
size_t pos = 0;
file.open('/path/to/file');
while(getline(file, line)){
while ((pos = line.find(delim)) != npos) {
temp = file.substr(0, file.find(delim);
line.erase(0, pos + delim.length());
// depending on the value of lineNum
// work with temp
}
lineNum++;
}
Быстрый вопрос в том, может ли он преобразовать в int
(что мне нужно для этого), когда я назначаю его непосредственно temp, или мне нужно будет использовать его как int перед тем, как работать с ним.
Попробуйте что-то вроде этого:
std::ifstream inFile("/path/to/file");
std::string line;
int lineNum = 0;
while (std::getline(inFile, line))
{
++lineNum;
std::istreamstream iss(line);
int value;
while (iss >> value)
{
// work with value depending on lineNum
}
}
Когда у вас есть файл, который вы хотите открыть, вы можете использовать getline()
string line;
ifstream file;
file.open('/path/to/file');
while(!file.eof()){
// delimiter by default is '\n'
getline(file, line);
cout << line << endl;
}
while(!file.eof())
file.substr()
должен бытьline.substr()
, аfile.find()
должен бытьline.find()
. Но у вас уже естьpos
, поэтому второйfind()
избыточен. Чтобы облегчить синтаксический анализ, вы должны использоватьistringstream
для разбора каждой строки. Затем вы можете использоватьgetline()
с разделителем для чтения подстрок с разделителями из потока или использовать оператор>>
потока, когда разделитель - это пробел. Я отредактировал свой ответ, чтобы показать это.