2013-10-31 181 views
0

我目前正在開發一個需要評估神祕文本文件的項目,並將它與提供給我的簽名進行交叉引用。 我面臨的一個問題是,我們已經從項目文件夾中的文件夾中讀取文件。 (我正在使用Visual Studios 2010) 我提供了一個簡單的'data.txt'文件,其中包含一個表示簽名文件名數的整數;其次是許多簽名,然後是表示神祕文本數量的另一個整數;其次是那些神祕的文字。 我的問題是,如何在一個文件中讀取,從另一個文本文件中給它們的路徑? 了「的data.txt」文件如下:在讀取文件夾內的文件時遇到問題C++

13 
signatures/agatha.christi.stats 
signatures/alexandre.dumas.stats 
signatures/brothers.grim.stats 
signatures/charles.dickens.stats 
signatures/douglas.adams.stats 
signatures/emily.bronte.stats 
signatures/fyodor.dostoevsky.stats 
signatures/james.joyce.stats 
signatures/jane.austen.stats 
signatures/lewis.caroll.stats 
signatures/mark.twain.stats 
signatures/sir.arthur.conan.doyle.stats 
signatures/william.shakespeare.stats 
5 
documents/mystery1.txt 
documents/mystery2.txt 
documents/mystery3.txt 
documents/mystery4.txt 
documents/mystery5.txt 

簽名文件之一如下(不要問爲什麼我的教授決定用.stats,因爲我不知道):

agatha christie 

4.40212537354 

0.103719383127 

0.0534892315963 
1 
0.0836888743 

1.90662947161 

我無法更改文件,也無法更改它們的保存區域。 我可以在'data.txt'文件中輕鬆讀取,但似乎無法找到簽名文件。 任何幫助,將不勝感激。 一旦我在簽名中讀取,我計劃將它們作爲結構體保存在數組中,以便稍後在項目中引用它們以將它們與神祕文本的簽名進行比較。 這個程序使用命名空間標準,如果這對任何人都很重要...

回答

0

@ ptic12 你的答案幫了不少忙,我設法編輯/操縱它來獲得我所需要的。 我創建了一個簽名類,使它更簡單一些。 這段代碼寫起來相當簡單,它的時間比它需要的長,但它的工作,稍後在我計劃'瘦身'有點

有一些東西從這當然丟失,但是這將是一個很長的帖子,如果我把它們列入

vector<Signature> MakeSignatures(string DataFile) 
{ 
    string SigFile="", MystFile=""; 
    int NumSig=0, NumMystery=0; 
    ifstream infile(DataFile);// opens data.txt 
    infile >> NumSig; 
    vector<Signature> SigStorage;//creates a vector in which to store signature objects 
    for(int i=0; i <NumSig; i++) 
    { 
     infile >> SigFile; 
     Signature Sig(SigFile); 
     SigStorage.push_back(SigFile); 
    } 
    infile >> NumMystery; 
    for(int i=0; i < NumMystery; i++) 
    { 
     infile >> MystFile; 
     //not quite done here yet 
      //large part of project will be called here 
    } 

    return SigStorage; 
} 

,並在簽名類的的.cpp

Signature::Signature(string SigFile) 
{ 
    ifstream in(SigFile); 
    while(!in.eof()) 
    { 
     getline(in, AuthName); //gets author name 
     in >> AverageWord; //get next 5 floats 
     in >> TypeToken; 
     in >> HapaxLego; 
     in >> AverageNumber; 
     in >> SentenceCom; 
    } 

} 

構造希望這將幫助任何人誰需要在同一類的幫助下,我做到了。 (並沒有真正幫助data.txt包含拼寫錯誤的路徑,花了一段時間纔算出來)

0

作爲閱讀雙打例子。

File *file; 
file = std::fopen(filename.c_str(), "r+b"); 

std::fread(&/*variableName*/, sizeof(double), 1, file); 

這是你在找什麼?

0

我假設你的目錄結構如下:

the_program 
data.txt 
signatures/... 
documents/... 

然後,它應該直接讀取文件:

std::ifstream in("data.txt"); 
std::vector<std::string> files; 
int num_files; 
in >> num_files; 
for (unsigned i = 0; i < num_files; ++i) { 
    std::string file; 
    in >> file; 
    files.push_back(file); 
} 

// read mystery filenames 

std::vector<std::string>::iterator it; 
for (it = files.begin(); it != files.end(); ++it) { 
    std::ifstream sig(it->c_str()); 

    // sig is your signature file. Read it here 
} 
相關問題