2013-10-31 140 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 
} 
相关问题