2014-11-12 2 views
0

Каков самый простой (самый простой) способ определить, когда вы достигаете конца строки данных во время чтения из обычного текстового файла с использованием ifstream? В основном мне нужно делать разные вещи с данными, основанными на его местоположении (измеряется номером строки) в текстовом файле.Обнаружение символов новой строки inFile stream C++

Так что, если у меня был текстовый файл со следующим содержимым:

12 54 873 9 87 23 
34 25 93 10 94 5 8 

первой линии я мог бы сохранить, но вторая строка мне нужно изменить перед сохранением или отменить, или сделать какой-то другой операция.

Прямой файл читаемый ищет что-то вроде этого

while (inFile >> temp) 
    //store temp; 

EDIT:

Я не проверял это еще бит это то, что я придумал. Я не много делал с более сложными функциями класса строк, поэтому мой синтаксис может быть неправильным, но похоже ли, что я на правильном пути?

// 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 (что мне нужно, чтобы это было), когда я задаю его непосредственно на темп, или если мне придется бросить его как межд перед началом работы с ним.

+0

GetLine в 'линию' строки, поставить 'линию' в istringstream и обрабатывать его –

+0

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

ответ

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())' – Borgleader

+0

Это простой пример. Если я могу спросить, почему бы не использовать eof()? (Кроме того, что пустая строка пустых строк находится в конце файла). – JMc

+0

Все еще не так: Тестирование для EOF неверно (в некоторых случаях это разумно) и опускать тестирование извлечения (getline) –

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

Я придумал что-то вдоль этих строк, см. «Редактировать для обновления». – user3776749

+0

выглядит многообещающим, я сообщу, правильно ли он работает, спасибо за помощь! – user3776749

Смежные вопросы