我目前正在开展一个项目,该项目需要评估神秘文本文件,并使用提供给我的签名交叉引用它们。 我面临的一个问题是我们已经从items文件夹中的文件夹中读取了文件。 (我使用Visual Studios 2010) 我提供了一个简单的data.txt' file,包含一个表示签名文件名数量的整数;然后是那么多签名,然后是另一个表示神秘文本数量的整数;接着是那么多神秘的文本。 我的问题是,如何在一个文件中读取,从另一个文本文档中给出的路径? ' data.txt'文件如下:
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”#39;文件,但似乎无法找到签名文件。 任何帮助,将不胜感激。 一旦我读了签名,我计划将它们保存为数组中的结构,这样我可以在项目的后期引用它们,将它们与神秘文本的签名进行比较。 这个程序正在使用命名空间std,如果这对任何人都很重要......
答案 0 :(得分:0)
读取双打的示例。
File *file;
file = std::fopen(filename.c_str(), "r+b");
std::fread(&/*variableName*/, sizeof(double), 1, file);
这是你要找的吗?
答案 1 :(得分: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
}
答案 2 :(得分: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;
}
和Signature类的.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包含拼写错误的路径,花了一段时间来计算出那个路径)