0

以下の例のように出力されるテキスト ファイルを解析しようとしています。私の例にはエントリが限られていますが、実際には 15000 行を超えるため、これらを個別に読み取ることはできません。

ID IC 時間

15:23:43.867 /g/mydata/dataoutputfile.txt 識別子

0003 1233 abcd

0043 eb54 abf3

000f 0bb4 ac24

000a a325 ac75

0023 0043 ac91 15:23:44.000 /g/mydata/dataoutputfile.txt 識別子

0003 1233 abcd

0043 eb54 abf3

000f 0bb4 ac24

000a a325 ac75

0023 0043 ac91

私が持っている出力のようなものです。時間列は頻繁にリセットされます。

私が今行っているのは、私の例にある 3 つに加えて、2 つの追加の列を作成することです。最初の列は、ID 列をわかりやすいメッセージに変換したものです。2 番目の追加の列は、タイム コードがリセットされた場合を除き、各タイム コード間の差を計算します。

私の論理は、必要な変換と操作を実行できるように、各列を配列に読み込むことです。

翻訳を取得する方が少し簡単になると思うので、最初にタイムコード差分を取得することに焦点を当てています。

私が抱えている問題は、エントリをマトリックスに読み込むことです:

私のコードは次のようになります。

while(readOK && getline(myfile,line))
{
stringstream ss(line);
string ident,IC,timehex,time,filelocation;
string junk1,junk2;
int ID[count];
int timecode[count2];
int idx=0;

if(line.find("ID") !=string::npos)
{
     readOK=ss>>ident>>IC>>timehex;
     myfile2<<ident<<"\t\t"<<IC<<"\t\t"<<timehex<<"\t\t"<<"ID Decoded"<<"\t\t"<<"DT"<<endl;
     myfile3<<"headers read"<<endl
}

else if(line.find("identifier") != string::npos)
{
     readOK=ss>>time>>filelocation;
     myfile3<<"time and location read";
     myfile2<<time<<"\t\t"<<filelocation<<endl;
}

else //this is for the hex code lines
{
     readOK=ss>>hex>>ID[idx]>>IC>>timecode[idx];

     if (readOK)
     {
          myfile2<<setw(4)<<setfill('0')<<hex<<ID[1000]<<"\t\t"<<IC<<"\t\t"<<timecode[1000]<<endl;
          myfile3<<"success reading info into arrays"<<endl;
     }

     else
     myfile3<<"error reading hex codes"<<endl;
}
idx++;
}

ただし、このコードは正しく機能しません。すべての行をまったく同じように読み取ることはできません。これは、コードをいつ見ているかを追跡するために挿入される時間とファイルの場所のエントリが介在するためです。

私の腸は、マトリックスエントリを呼び出すのが早すぎて、まだ入力されていないことを教えてくれます.1000番を数えると0になるからです(入力ファイルには15000行をはるかに超えており、プログラムの別の部分で動的に設定された配列の境界)。

ループを通過するたびにカウント変数が0にリセットされるという継承の問題があるため、エントリを正しく割り当てる方法を理解できないようです。

4

1 に答える 1

0

int idxwhile ループの範囲外 (while の前) に定義します。今のままでは、ループするたびにリセットされます。

于 2012-05-23T14:45:00.810 に答える