Обнаружение символов новой строки в потоке файлов c ++

0

Какой самый простой (самый простой) способ определить, когда вы достигаете конца строки данных во время чтения из обычного текстового файла, используя 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 перед тем, как работать с ним.

  • 0
    getline в строку 'line', поместите 'line' в istringstream и обработайте его
  • 0
    file.substr() должен быть line.substr() , а file.find() должен быть line.find() . Но у вас уже есть pos , поэтому второй find() избыточен. Чтобы облегчить синтаксический анализ, вы должны использовать istringstream для разбора каждой строки. Затем вы можете использовать getline() с разделителем для чтения подстрок с разделителями из потока или использовать оператор >> потока, когда разделитель - это пробел. Я отредактировал свой ответ, чтобы показать это.
Теги:
newline
fstream

2 ответа

0

Попробуйте что-то вроде этого:

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
    }
}
  • 0
    Я придумал что-то в этом духе, см. «Редактировать» для обновления.
  • 0
    Это выглядит многообещающе, я сообщу, если это работает должным образом; Спасибо за помощь!
0

Когда у вас есть файл, который вы хотите открыть, вы можете использовать getline()

string line;
ifstream file;
file.open('/path/to/file');
while(!file.eof()){
    // delimiter by default is '\n'
    getline(file, line);
    cout << line << endl;
}
  • 2
    Вы не должны использовать while(!file.eof())
  • 0
    Это просто простой пример. Если я могу спросить, почему бы не использовать eof ()? (Помимо вероятности, что в конце файла будет куча пустых строк).
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню