2012-05-23 71 views
0

我試圖解析輸出的文本文件,如下面的示例所示,我的示例具有有限的條目,但是我的實際條目超過了15000行,所以我不能在單獨讀取這些:解析列到數組中,同時區分行中的內容

ID IC TIME

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列轉換成可理解的消息的轉換。第二個附加列將計算每個時間碼之間的差異,除非時間碼重置。

我的邏輯是,將每列讀入一個數組,以便我可以執行必要的翻譯和操作。

我專注於首先獲取時間碼差異,因爲我認爲翻譯會更簡單一些。

我遇到的問題是讓讀入他們的矩陣中的條目:

我的代碼看起來有點像這樣:

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,每次通過循環。

+0

爲了增加清晰度,我開始編輯將輸入文件放入代碼塊(我的首選項)或塊引用中,但是我意識到我可能正在查看一些自動換行的非常長的行。也許你應該自己編輯。 – dmckee

回答

0

定義int idx以外的while循環(在while之前)。就像現在一樣,每次通過循環它都會被重置。

+0

當我試圖獲得分段錯誤 – user1412878

+0

@ user1412878時,以及如果它在循環內定義,那麼它將在每次通過時重置爲零。你想要那個嗎?如果是這樣,那麼爲什麼你在循環結束時增加它。我認爲seg-fault是由於其他原因導致的,也許是現在的越界訪問,它的正確遞增。 – Brady

+0

通過調試來判斷段錯誤來自哪裏的最好方法是什麼?我的工具非常有限,因爲我通過文本編輯器編輯此文件,並且真的無法訪問真正的調試程序。 – user1412878