2016-04-22 3 views
0

Ich muss eine TXT-Datei von VC++ in VS2013 lesen.Lesen von Daten aus einer Datei mit mehreren Abschnitten von VC++ in VS2013

In der Datei gibt es mutiple Sektionen:

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

Ich brauche die Linien in verschiedene Datenstruktur für section1 zu speichern: mapSection1>

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

Kann ich den Code verwenden:

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? 
     } 

Auch ich kann die ganze fi laden le in einen Datensatz und verarbeitet dann jede Zeile oder verarbeitet jede Zeile, wenn die Datei Zeile für Zeile gelesen wurde.

Welches ist effizienter?

dank

Antwort

0

Kann ich den Code verwenden: ...

Nicht ganz.

Verwendung:

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: 
     ... 

} 

Auch ich die ganze Datei in einen Datensatz laden und dann jede Zeile verarbeiten oder jede Zeile verarbeiten, wenn die Datei Zeile für Zeile gelesen wurde.

Welches ist effizienter?

Fast immer letzteres.

Verwandte Themen