Читать данные из файла с несколькими разделами из VC++ в VS2013

Мне нужно прочитать текстовый файл из VC++ в VS2013.

В файле есть несколько разделов:

 #section1
 head1,head2,head3
 dcscsa, sdew, safce
 .....
 #section2
 head1,head2,head3, head4,head5
 112,633,788,632,235
 .....

Мне нужно сохранить строки в другую структуру данных для section1: mapSection1>

  for section12
  mapSection2<string, map<string, int>>

Могу ли я использовать код:

 string aLine;
 getline(file, aLine);
 stringstream ss(aLine);
 int cnt = 0;
 if (file.good())
 {
    while (!file.eof())
    {
        string substr;
        getline(file, aLine);
        stringstream ss(aLine);
        while (ss.good())
        {
            // how to save data to different map for different section?
        }

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

Какой из них более эффективен?

Спасибо

1 ответ

Могу ли я использовать код: ...

Не совсем.

Использование:

int sectionNo = 0;
while (getline(file, aLine))
{
    if (aLine.empty()) continue;
    if (aLine[0] == '#')
    {
        ++sectionNo;
        getline(file, aLine); // read headings... use them if you like
        continue;
    }
    std::stringstream ss(aLine);
    switch (sectionNo)
    {
      case 1:
        if (ss >> a >> b >> c >> std::skipws && ss.eof())
            ... use a, b, c ...
        else
            throw std::runtime_error("invalid data in section 1 " + aLine);
        break;
      case 2:
        ...

}

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

Какой из них более эффективен?

Почти всегда последний.

Другие вопросы по тегам