2016-04-29 15 views
-1

バイナリ形式のxmlファイルがあります。このファイルの一部の行に含まれるキーワードをC++コードで抽出します。たとえば、次のキーワード<GK-VECTORS>を検索し、そのキーワードがファイル内に存在することがわかったとします。ここに私のC++コードです:バイナリ形式のxmlファイルでキーワードを見つける

#include <fstream> 
#include <iostream> 

using namespace std;  

int main(){ 
    int size(8); 
    ifstream gfile("gkvectors.dat", ios::binary | ios::in); 
    string keyword = "<GK-VECTORS>"; 
    string line; 
    while(gfile.good()){ 
    getline(gfile,line); 
    bool found = line.find(keyword); 
    if(found != string::npos){ 
     cout << line << '\n'; 
     break; 
    } 
    } 
    return 0; 
} 

が、私はこのファイルを実行してから得た出力は(人間)読めない:ここでは

は(未フォーマット)xmlファイルの内部がどのように見えるかです:

^D^@^@^@^E^Z^@^@^D^@^@^@^^^@^@^@\200^Z^@^@ 
<?iotk version="1.2.0"?> 
^^^@^@^@^D^@^@^@^E^]^@^@^D^@^@^@!^@^@^@\200^]^@^@ 
<?iotk file_version="1.0"?> 
!^@^@^@^D^@^@^@^E^U^@^@^D^@^@^@^Y^@^@^@\200^U^@^@ 
<?iotk binary="T"?> 
^Y^@^@^@^D^@^@^@^E^X^@^@^D^@^@^@^\^@^@^@\200^X^@^@ 
<?iotk qe_syntax="F"?> 
^\^@^@^@^D^@^@^@^A^N^@^@^D^@^@^@^R^@^@^@\200^N^@^@ 
<GK-VECTORS> 
^R^@^@^@^D^@^@^@^A;^@^@^D^@^@^@?^@^@^@\200;^@^@ 
    <NUMBER_OF_GK-VECTORS type="integer" size="1" kind="4"> 
?^@^@^@^H^@^@^@^@^@^@^@\255^C^@^@^H^@^@^@^D^@^@^@^B^[^@^@^D^@^@^@^_^@^@^@\200^[^@^@ 
    </NUMBER_OF_GK-VECTORS> 
^_^@^@^@^D^@^@^@^A?^@^@^D^@^@^@C^@^@^@\200?^@^@ 
    <MAX_NUMBER_OF_GK-VECTORS type="integer" size="1" kind="4"> 
C^@^@^@^H^@^@^@^@^@^@^@\326^C^@^@^H^@^@^@^D^@^@^@^B^_^@^@^D^@^@^@#^@^@^@\200^_^@^@ 
    </MAX_NUMBER_OF_GK-VECTORS> 
#^@^@^@^D^@^@^@^A1^@^@^D^@^@^@5^@^@^@\2001^@^@ 
    <GAMMA_ONLY type="logical" size="1" kind="4"> 
5^@^@^@^H^@^@^@^@^@^@^@^@^@^@^@^H^@^@^@^D^@^@^@^B^Q^@^@^D^@^@^@^U^@^@^@\200^Q^@^@ 
    </GAMMA_ONLY> 
^U^@^@^@^D^@^@^@^AC^@^@^D^@^@^@G^@^@^@\200C^@^@ 
    <K-POINT_COORDS type="real" size="3" kind="8" UNITS="2 pi/a"> 
G^@^@^@^\^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^\^@^@^@^D^@^@^@^B^U^@^@^D^@^@^@^Y^@^@^@\200^U^@^@ 
    </K-POINT_COORDS> 
^Y^@^@^@^D^@^@^@^A.^@^@^D^@^@^@2^@^@^@\200.^@^@ 
    <INDEX type="integer" size="941" kind="4"> 

誰かがこの問題を解決するのに役立ちますので、読みやすい出力が得られますか?

+2

"バイナリ形式のXML"はどういう形になっていますか? XMLは、定義上、ASCII形式です。おそらく、ファイルがどのように見えるかの簡単な例を示すことができます。 – lurker

+0

@lurkerここにそのファイルを追加するには? xmlファイルは実際にはxml形式のいくつかのFortranコードによって生成されますが、バイナリ= .trueを有効にします。 "write(unit、binary = .true)"の中にある – rnels12

+1

@ rnels12バイナリファイルフォーマットを持っていて、 'getline()'を使ってそれを読み取っていますか? –

答えて

0

XML specification, especially section 2.6 Processing Instructionsをご確認ください。

PIはドキュメントの文字データの一部ではありませんが、アプリケーションに渡されなければなりません。

アプリケーションにそのままデータを渡す必要があります。
データを表示する場合は、16進形式のダンプユーティリティなど16進形式でデータを表示する必要があります。

また、データを解釈するには、データのレイアウトを知る必要があります。

アプリケーションデータなので、データが印刷可能であるという保証はありません。

関連する問題