2017-10-27 1 views
0

wenn ich eine Textdatei wie die haben:Wie kann ich eine Textdatei Zeile für Zeile verarbeiten und ihre Parameter in Variablen unter Verwendung von C++ aufteilen?

  • READ RESW 1
  • TR RESW 10
  • LDA Stellen
  • BYTE Do 1

Ich habe versucht, so etwas wie das:

while (infile >> label >> opcode >> operand) 

aber das Problem Wenn eine Marke nicht wie in Zeile 3 existiert, wartet das Programm, bis es seinen dritten Parameter von der nächsten Zeile erhält. Wie kann ich das beheben?

+0

Wenn Sie wissen, Welche Linien, dann verfolgen Sie die Linien und verwenden Sie Bedingungen an den entsprechenden Punkten. –

+0

leider nicht. – RowanX

Antwort

1

Sie können Zeilen lesen und dann die Werte aus den Zeilen extrahieren. Auf diese Weise pflegen Sie von der nächsten Zeile zu lesen, wenn der letzte Parameter nicht vorhanden ist: kein Operand dann operand ist

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 


int main() 
{ 
    std::ifstream in("in.txt"); 

    std::string line; 
    while (std::getline(in, line)) { 
     std::string label; 
     std::string opcode; 
     std::string operand; 

     std::stringstream{ line } >> label >> opcode >> operand; 

     std::cout << label << " " << opcode << " " << operand << std::endl; 
    } 

    return 0; 
} 

Wenn String leer sein wird.

Auch können Sie dies tun:

int operand = INT_MAX; 
std::stringstream{ line } >> label >> opcode >> operand; 
if(operand == INT_MAX) { 
    // no int operand found 
} 
-2

Ich würde Ihnen vorschlagen, die komplette Zeile aus der Datei zu lesen und dann strtok verwenden zu spalten die label, opcode und operand

string str; 
ifstream myfile ("example.txt"); 
while (getline (myfile,str)) 
    { 
     char *pch; 
     pch = strtok (str," "); 
     while (pch != NULL) 
     { 
      printf ("%s\t",pch); // This will print the values which can also be stored in variables. 
      pch = strtok (NULL, " "); 
     } 
    } 
myfile.close(); 
+0

Die Funktion 'strtok' funktioniert nicht mit' std :: string'. Die 'strtok'-Funktion arbeitet mit Arrays von Zeichen und modifiziert die Arrays. –

+0

Wenn Sie gefährlich leben, können Sie 'strtok (str.data()," ");' verwenden. –

Verwandte Themen