2013-10-03 2 views
0

Я пытаюсь создать класс парсера, который будет анализировать файл на основе "" и поместить слова в связанный список.Создание файла Parser в C++

class FileReader 
{ 
public: 
    FileReader(char* file) 
    { 

    ifstream fout (file, ifstream::in); 

    string hold; 

    while (fout.good()) 
    { 
     getline (fout, hold, " "); 
     cout << hold; 

    } 

    fout.close(); 

    } 

}; 

Функция getline(fout, hold, " ") не распознает «» в качестве разделителя.

Я еще не закодировал связанную часть списка, так что это всего лишь часть разбора программы.

Также был бы лучший способ создать парсер?

+0

Если регулярное выражение является вариант, это может помочь: http://criticalindirection.com/2016/01/05/lex-based-config-parserreader/ – user31986

ответ

3

Это должно работать так:

#include <fstream> 
#include <iterator> 
#include <list> 
#include <string> 

std::ifstream infile(file); 

std::list<std::string> words(std::istream_iterator<std::string>(infile), 
          std::istream_iterator<std::string>()); 

Теперь words ваш связанный список разделенных пробельными лексем.

Урок: Лучший тип кода - тот, который вам не нужно писать.

+0

, но кто-то должен написать это lol. – dchhetri

+2

@ user814628 Нет, если он уже есть. – Appleshell

+0

@ user814628: Вы были готовы использовать 'std :: getline', поэтому ... небольшая разница. –

2

Последний параметр в getline является char не string. Рассматривая свой текущий код, вы хотите getline(fout,hold,' ') или просто getline(fout,hold) - * если вы хотите всю строку.

*: редактировать

+0

'getline (fout, hold)' получит целую строку ... не только отдельные слова. –