2017-07-30 15 views
-3

私は膨大な数の行を含む膨大なファイルを持っています。各行の書式は次のとおりです。特定の書式文字列での効率的な分割

文字列ではない文字列のBとCの値が必要です。

私の現在の分割の戦略を次のように入力ファイルは、行の数十が含まれてい

std::stringstream ss; 
std::string line, temp, bValue, cValue; 

while (std::getline(infile, line)) { 

    ss.clear(); 
    ss.str(out_str); 

    std::getline(ss, temp, '\t'); // Skip value of A 
    std::getline(ss, bValue, '\t'); // Set value of B 
    std::getline(ss, cValue, '\t'); // Set value of C 

    // Use values... 
} 

ので、さえ小さな改善が私のプログラムの全般的なパフォーマンスに影響を与えます。

パフォーマンスを向上させるためのアイディアやライブラリはありますか?同じボトルネックに直面して固定しましたか?

ありがとうございました。

+0

、インデックス2と4でアクセス文字、全体のラインを読んですすぎ、繰り返し:別テイクが ニートではなく、ただaに不要な値をダンプし、後でそれを上書きされ、次のようです。 –

+0

4つの値をすべて読み、最初と最後を破棄しますか? –

+0

億? Thats a lot –

答えて

0

唯一の空白がデータを区切るものであれば、これは簡単な方法です。コード内の区切りにタブを使用するように見えるので、これも使用しますが、他のものと簡単に入れ替えることができます。これは何

std::string line; 
std::string a, b; 

while (std::getline(infile, line)) { 
    std::stringstream ss(line); 

    ss.ignore(std::numeric_limits<std::streamsize>::max(), '\t'); 

    ss >> a >> b; 
} 

は最初'\t'に到達するまで入力を無視され、その後、ab文字列に文字列を入れます。

std::string line; 
std::string a, b; 

while (std::getline(infile, line)) { 
    std::stringstream ss(line); 
    ss >> a >> a >> b; 
} 
+0

最初の値と2番目の値の両方に同じ宛先変数を使用すると混乱します。あなたが単に使用しない最初の値(それについてのコメントがあり、4番目の値が無視されている)に3番目の(一時的な)文字列を使用することが望ましいです。 –

+0

@Someprogrammerdudeだから、私はそれがきちんとしていないと書いたのですが、それ以外のものがあれば簡単な解決策です。それが私が最初のものを提供した理由です。 – N00byEdge

関連する問題