2017-10-27 4 views
0

は:テキストファイルを行ごとに処理し、そのパラメータをC++を使用して変数に分割する方法はありますか?私はそのようなテキストファイルがある場合

  • READ RESW 1
  • TR RESW 10
  • LDAが
  • はBYTE 1

を済ませると、私はそのような何かを試してみました

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

しかし、probl 3行目のようにラベルが存在しないときは、次の行の3番目のパラメータを取得するまでプログラムは待機します。 どうすれば修正できますか?

+0

あなたが知っている場合その行を追跡し、適切なポイントで条件を使用します。 –

+0

残念ながら、私はしません。 – RowanX

答えて

1

行を読み取ってから、行から値を抽出することができます。最後のパラメータが存在しない場合は、この方法では、次の行から読み取る文句を言わない:何のオペランドがありません

#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; 
} 

場合、operand文字列は空になります。

また、あなたはこれを行うことができます。

int operand = INT_MAX; 
std::stringstream{ line } >> label >> opcode >> operand; 
if(operand == INT_MAX) { 
    // no int operand found 
} 
私は、ファイルからの完全なラインを読み、そして分割する strtokを使用するためにあなたをお勧めします
-2

labelopcodeoperand

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

'strtok'関数は' std :: string'で動作するとは限りません。 'strtok'関数は文字の配列で動作し、配列を変更します。 –

+0

危険な状態で生活している場合は、 'strtok(str.data()、" ");'を使うことができます。 –

関連する問題