C ++顺序读取多个输入文件
我有47个不同的文件:
- 001_template.dat
- …
- 047_template.dat
在名为/ data的目录中。 我需要将每个模板文件与三个不同的查询文件进行比较,也可以在目录中进行比较。 这些被命名为:
- 001_AU01_query.dat
- 001_AU12_query.dat
- 001_AU17_query.dat。
我知道如何让所有这些运行,但我将不得不将这6行代码剪切并粘贴46次,程序将变得非常长且令人困惑。
是否有一种循环这些文件的好方法? 可能通过循环模板文件,然后对每个模板进行三次查询? 我显然有一个相似性函数和一个已定义的排序函数,以及inputFile
。 这是我想要转换的代码:(不是作业,这是我一直在做的面部表情识别项目)
int main() { vector temp01; vector temp12; vector temp17; temp01 = similar(inputFile("data/001_AU01_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp01); temp12 = similar(inputFile("data/001_AU12_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp12); temp17 = similar(inputFile("data/001_AU17_query.dat"), inputFile("data/001_template.dat")); sortAndOutput(temp17); }
然后我将使用sprintf创建文件名到循环中:
char data[100]; char template[100]; char* datas[3] = {"%3d_AU01_query.dat", "%3d_AU12_query.dat", "%3d_AU17_query.dat"}; for(i=0; i<47; i++){ for{j=0; j<3; j++){ sprintf(template, "%03d_template.dat", i); // create the name of the template 1-47 sprintf(data, datas[j], i); compare(template, data); } }
我认为这应该按预期工作。
使用两个包含文件和模板名称的数组并循环它们:
char* files[47] = {"file1", "file2", ...., "file47"}; char* templates[3] = {"template1", "template2", "template3"};
并循环它们:
for(i=0; i<47; i++){ for{j=0; j<3; j++){ compare(file[i],template[j]); } }
void work() { vector temp; char data[100]; char templates[100]; char* datas[3] = { "data/%03d_AU01_query.dat", "data/%03d_AU12_query.dat", "data/%03d_AU17_query.dat" }; for (int i = 1; i < 48; i++) { for(int j = 0; j < 3; j++) { sprintf_s(templates, "data/%03d_template.dat", i); // create the name of the template 1-47 sprintf_s(data, datas[j], i); temp01 = similar(inputFile(data), inputFile(templates)); sortAndOutput(temp); } } }