2016-10-11 6 views
0

Я пишу код для 1. читайте в файле через аргумент командной строки, 2. анализируйте каждую строку данных (строку) и 3. разделите данные на 4 подстроки.C++ parsing data from file I/O

сказать, что я game.txt

3 
overwatch|hanzo|junkrat|reinhart 
league of legends|vayne|ezreal|master yi 
starcraft|marine|zergling|zealot 

вывод, что я хочу, чтобы каждый каждая строка данных будет расщепляется на 4 подстроки, и я хочу, чтобы сохранить каждый соответствующий столбец в какой-то контейнер. Возможно, связанный список строк или массив строк. Так,

overwatch 
hanzo 
junkrat 
reinhart 
league of legend 
vayne 
ezreal 
... 


String nameOfGame = overwatch; 
String leastFav = hanzo; 
String fav = junkrat; 
String bestCharacter = reinhart; 

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

Что я могу здесь сделать?

+2

Пожалуйста, покажите вашу попытку. Это поможет вам получить лучшие ответы. –

+0

Если каждая строка всегда имеет одно и то же содержимое, рассмотрите определение класса и использование std :: vector этого класса. – user4581301

+0

Вы можете использовать ['std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) для чтения строк из файла. Бесчисленные примеры переполнения стека. Вы можете использовать ту же функцию, чтобы читать строки '|' -delimited из 'std :: istringstream'. Существуют также вспомогательные функции 'getline' для всех классов потоков. – paddy

ответ

0

Вы можете использовать ifstream для чтения первого номера и lines из файла. Для получения данных из любой строки вы можете использовать istringstream. Вы можете создать объект istringstream с строкой. После этого вы можете прочитать компоненты из строки, используя метод getline с delim = '|'.

После того, что вы можете печатать строки, как вы хотите

using String = std::string; 

int main(int argc, const char * argv[]) { 
    // insert code here... 

    std::ifstream inputFileStream("Input.txt"); 
    int count; 
    inputFileStream>>count; 
    inputFileStream.ignore(1, '\n'); 

    for(int i = 0; i < count; i++) 
    { 
     String line; 
     std::getline(inputFileStream, line); 

     std::istringstream lineStream(line); 

     String nameOfGame; 
     String leastFav; 
     String fav; 
     String bestCharacter; 

     std::getline(lineStream, leastFav, '|'); 
     std::getline(lineStream, nameOfGame, '|'); 
     std::getline(lineStream, fav, '|'); 
     std::getline(lineStream, bestCharacter, '|'); 

     std::cout<< leastFav <<"\n"<<nameOfGame<<"\n"<<fav<<"\n"<<bestCharacter<<"\n\n"; 
    } 

    return 0; 
} 
+0

Большое спасибо Эндрю. Я прочитал несколько примеров об istringstream, и я не совсем понял, как он используется. Я попробую это снова и опубликую статус. –