2016-04-26 22 views
0

私はファイルからいくつかの情報を読み込もうとしていますが、本当に難しい時を過ごしています。ここで私は読んでしようとしているファイルの形式があります。だから、ファイルから読み込みます。複数のデリミタ? C++

Name#Description 
Name2#Description2 ... 
NameX#DescriptionX 
% 
info1,info2,info3,info4 ... 
infoX1,infoX2,infoX3,infoX4, 
% 
Keyword#Message 

一つの変数に名前を分割し、私はすべての#後のコードの最初の部分を分割されてやろうとしていると説明を別の変数に追加します。それから、最初の%の後に、それぞれの情報をそれ自身の変数に分割します。最後に、第2の%の後に上記のように多くの異なる変数を#で分割します。

私はwhile(getline(inFile, str, '%')を試しましたが、最初の行の後に読み込みを停止してから、%の下にあるものに行きます。ここにいくつかの問題があるので、どんな助けもありがとう!

以下
+0

これをいくつかのループに分割して、最初のループが '%'文字まで入力を解析し、ファイルストリーム内のこの文字の位置を取得し、そこから次の解析ループを開始します。 – ArchbishopOfBanterbury

+0

私の経験ienceはかなり制限されていますが、どのようにループを%で停止させるのでしょうか? –

+1

@jusこれはあなたが**%**ループを%停止する方法です** if(文字== '%') 'その後' break; 'または' continue; 'ここで_break_は文字通りループから外れ、_continue_はその下にあるすべてのステートメントを無視し、ループをインクリメントして "ループ" –

答えて

1

あなたがこのことについて行くことができる方法については(非完全)の構造である:

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

int main(void) { 

    const char* in_file_path = "foo.txt"; 
    std::ifstream in_file(in_file_path); 

    std::string buffer = ""; 
    while (std::getline(in_file, buffer)) { 
     //parse input using `#` as separator... 
     if (buffer.at(0) == '%') { 
      // get position of `%` char in stream using (e.g.) in_file.seekg 
      break; 
     } 
    } 
    // after getting position of first `%` char in stream, this loop 
    // will start from this position in the file 
    while (std::getline(in_file, buffer)) { 
     // parse input using `,` as separator... 
     if (buffer.at(0) == `%`) { 
      // get position of `%` char in stream using (e.g.) in_file.seekg 
      break; 
     } 
    } 

    // ... and so on for as many separations as you need until you hit end of file 

} 

これは、(例えば)を使用してに依存している、std::ifstreamseekg方法:

http://en.cppreference.com/w/cpp/io/basic_istream/seekg

関連する問題