ファイルから書式付き行を読み込み、解析して結果をファイルに出力する必要があります。私が抱えている問題は、入力を適切に解析して空白とコンマを処理することです。ファイル内の行の形式は、次のようになります。空白とコンマに基づいて入力文字列を分割する
a r3, r2, r1
ah r8, r5, r6, r7
ai r10, i10, r127
したがって、行に4〜5種類の要素がある可能性があります。最初の要素は "コマンド"、その後は空白、そしてコンマと空白で区切られた値です。
私の現在の実装は以下の通りです:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <bitset>
using namespace std;
void main()
{
string instruction;
vector<string> myString;
ifstream inFile;
inFile.open("myfile.txt");
int i = 0;
if (inFile.is_open()){
cout << "test" << endl;
//Read until no more lines in text file to read
//while (getline(inFile, instruction))
while (inFile >> instruction)
{
istringstream ss(instruction);
string token;
//Separate string based on commas and white spaces
while (getline(ss, token,',')){
//getline(token, token, ' ');
//Push each token to the vector
myString.push_back(token);
cout << myString[i] << endl;
i++;
}
}
}
system("pause");
}
しかし、これは動作しません。私がa r3, r2, r1
でテストすると、私はa
しか得られず、プログラムは空白を見ているので読み込みを中止します。
私が試した他のバージョンがwhile (getline(inFile, instruction))
へのファイルの読み込みを変更することですが、その後、これは私の中に文字列を分割します。
a r3
r1
r2
それは(スペース)R3は一つの要素であると考えています。コンマに基づいて、行全体を正しく分割していますが、最初の読みは間違っています。なぜなら、aとr3を分割する必要があるからです。これどうやってするの?ここで
'operator >>'は、スペースで区切られたトークンを読み取ります。したがって、スペースをスキップしてstd :: stringがすべての文字を次のスペース(または改行)文字まで読み込みます。 –