2017-07-19 2 views
1

特定の部分文字列が検出された後、各行から外に出したいと思います。何とか私はissの5倍の出力を得ます。ここに私のコードは次のとおりです。istringstreamからの5倍の出力

//load all data from txt 
     string data; 
     std::ifstream infile("SavedData.txt"); 
     while (std::getline(infile, data)) { 
      std::istringstream iss(data); 
      string d; 
      while (iss >> d) { 
       //extract substring 
       unsigned firstBracket = data.find("("); 
       unsigned lastBracket = data.find(")"); 
       string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1); 
       cout << coordSynth << endl; 
      } 
     } 

出力は、今のようなものです:実は私はちょうど

0.0, 45.0, -390.0 
0.0, 45.0, -314.3 
0.0, 45.0, -277.3 
etc. 

を望んでいない、txtファイルにduplcatesはありません

0.0, 45.0, -390.0 
0.0, 45.0, -390.0 
0.0, 45.0, -390.0 
0.0, 45.0, -390.0 
0.0, 45.0, -390.0 
0.0, 45.0, -314.3 
0.0, 45.0, -314.3 
0.0, 45.0, -314.3 
0.0, 45.0, -314.3 
0.0, 45.0, -314.3 
etc. 

。このファイルには、次のようになります。ここ

0001(0.0, 45.0, -390.0).png 
0003(0.0, 45.0, -314.3).png 
0007(0.0, 45.0, -277.3).png (and so on...) 
+0

「SavedData.txt」はどのように見えるのですか? – NathanOliver

+0

0001(0.0、45.0、-390.0).png 0003(0.0、45.0、-314.3).png 0007(0.0、45.0、-277.3).png など –

+0

いくつかの書式設定が読めるようにします。 – NathanOliver

答えて

2

あなたの問題は

unsigned firstBracket = data.find("("); 
unsigned lastBracket = data.find(")"); 
string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1); 
cout << coordSynth << endl; 

0001(0.0, 45.0, -390.0).pngから0.0, 45.0, -390.0を取得するためのロジックであるものであるあなたも使って何をやっていないwhileループの内側にあります。そのループは、5つの出力を得るために、すべての入力行に対して5回実行されます(5つの「サブストリング」があるため)。行に含まれている個々の文字列で何もしていないので、whileループを取り除くだけでよいのです。それはあなたに何かを与える

int main() 
{ 
    std::string data; 
    std::istringstream infile("0001(0.0, 45.0, -390.0).png\n0003(0.0, 45.0, -314.3).png\n0007(0.0, 45.0, -277.3).png\n"); 
    while (std::getline(infile, data)) { 
     std::istringstream iss(data); 
     std::string d; 
     //extract substring 
     unsigned firstBracket = data.find("("); 
     unsigned lastBracket = data.find(")"); 
     std::string coordSynth = data.substr(firstBracket + 1, lastBracket - firstBracket - 1); 
     std::cout << coordSynth << std::endl; 
    } 
} 
+0

説明していただきありがとうございます! –

関連する問題