Читать данные из файла с несколькими разделами из 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:
...
}
Кроме того, я могу загрузить весь файл в набор данных, а затем обрабатывать каждую строку или обрабатывать каждую строку, когда файл читался построчно.
Какой из них более эффективен?
Почти всегда последний.