2013-05-15 75 views
-1

我有一個文件,其中的線條看起來像這樣:現在從混合數據C閱讀++文件

File root://eoscms//eos/cms/store/group/alca_ecalcalib/EFlow/AlCaPhiSym_Run2012C_B0T/B0TV5/variablesTree_100_1_JLs.root - Run: 200786 - Events: 683159 
File root://eoscms//eos/cms/store/group/alca_ecalcalib/EFlow/AlCaPhiSym_Run2012C_B0T/B0TV5/variablesTree_101_1_x4t.root - Run: 200786 - Events: 683530 
File root://eoscms//eos/cms/store/group/alca_ecalcalib/EFlow/AlCaPhiSym_Run2012C_B0T/B0TV5/variablesTree_102_1_uPO.root - Run: 200786 - Events: 684342 

.... 

,我想提出一個向量所有的運行和活動值,跳過文件的名稱。 我怎麼能這樣做? C++中有沒有像getline()那樣的東西,我可以從中選擇一個精確的位置來啓動輸入?

+0

爲什麼你就不能使用'fscanf'。 'fscanf(fp,「10 [abc]」,buf);' – RandyGaul

+0

對不起,我不知道該怎麼辦 – usumdelphini

+0

試試閱讀。 http://www.randygaul.net/2013/02/07/fscanf-power/ – RandyGaul

回答

1

如果所有在你的文件中的行遵循正確的格式,你可以做一些事情,如:

freopen("myfile.txt", "r", stdin); 

int run, event; 
while(scanf("%*s") != EOF){ 
    scanf("%*s - Run: %d - Events: %d", &run, &event); 
    // runs.push_back(run)... 
} 

然而要注意的%*s符會讀通過,並忽略任何一個字符串,不將其存儲,所以scanf("%*s")將始終返回0,除非您已達到文件的末尾。這意味着如果你的文件有多行格式的文本,你需要存儲該行的第一個字符串,並使用它的值來確定你應該採取的行動,而不是像上面的代碼那樣盲目地放棄它。否則,您可以將整個scanf放在一行中。

對於這個代碼,你將需要#include <cstdio>此處瞭解詳情:http://www.cplusplus.com/reference/cstdio/scanf/