2016-04-25 13 views
-2

Ich habe die folgende Textdatei, von der ich versuche, jede Zeile zu lesen und dann die Integer-Komponente und die String-Komponente getrennt zu speichern. Hier ist die Textdatei:Aus Textdatei lesen - Trennende Elemente der Zeile

RUID Name 
4325 name1 
RUID Name 
5432 name2 
6530 name3 
RUID Name 
1034 name4 
2309 name5 

Hier ist der Code, den ich mit lesen versuchen:

int main() 
{ 
    // Initialize Lists 
    LinkedList list1, list2, list3; 

    // Initialize Counter 
    int counter = 0; 


    // Entry containers 
    const int size = 12; 
    char entry[size]; 
    string name[size]; 
    string RUID[size]; 

    // BEGIN: "read.txt" 
    // Open 
    ifstream studDir; 
    studDir.open("read.txt"); 
    // Read 
    while (studDir.is_open()) 
    { 
     if (studDir.eof()) 
     { 
      cout << "Reading finished" << endl; 
      break; 
     } 

     else if (!studDir) 
     { 
      cout << "Reading failed" << endl; 
      break; 
     } 

     studDir.getline(entry, size); 


     if (entry != "RUID Name") 
     { 
      cout << entry << " " << endl; 
     } 

    } 


    return 0; 
} 

Könnte jemand eine Methode empfehlen, die mir erlauben würde, die „RUID Name“ Zeile als auch zu ignorieren als Trennen Sie den Integer- und den String-Teil der relevanten Zeilen. Ich habe mehrere Strategien mit wenig Erfolg ausprobiert. Auch möchte ich dann die Ausgabe der sortierten Liste in eine Textdatei schreiben.

Antwort

1

Sie sollten Ihre Schleife wie folgt umschreiben:

// Entry containers 
const size_t size = 12; 
std::string entry; 
string name[size]; 
string RUID[size]; 
size_t index = 0; 

// ... 

while (index < size && std::getline(studDir,entry)) { 
    if (entry != "RUID Name") { 
     cout << entry << " " << endl; 
     std::istringstream iss(entry); 
     if(!(iss >> RUID[index] >> name[index])) { 
      std::cout << "Reading failed" << endl; 
      break; 
     } 
     ++index; 
    } 
} 
+0

@LokiAstari Yup! –

Verwandte Themen