我想知道将数据目录逐行读入数组的最有效方法是什么。我的任务是在目录中搜索以特定扩展名结尾的文件,并读取该文件的每一行,每行只包含整数到一个维度数组。然后转到下一个文件并将该文件的每一行添加到现有数组中。我在看reading a text file into an array in c,并且认为我可以修改约翰内斯的例子以适应我的情景。提前谢谢。
编辑:
当我说效率高时我就是在内存分配方面道歉。它也必须在c中。我添加了家庭作业标签,并将研究glob上的手册页。会报告回来。
答案 0 :(得分:1)
如果我是正确的,那么任务是收集具有一些扩展名的一组文件中每行的数字。
迭代文件可以通过多种方式完成,匹配文件扩展名也可以。将未知数量的元素添加到数组也是如此。
根据我对问题的理解,这是一个建议的解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
int main(int argc, char *argv[])
{
char pattern[] = "/tmp/*.txt";
glob_t globbuf;
FILE *file;
int i, num, n = 0, max = 10;
int *numbers = malloc(sizeof(int) * max);
glob(pattern, 0, NULL, &globbuf);
for (i = 0; i < globbuf.gl_pathc; i++)
{
if ((file = fopen(globbuf.gl_pathv[i], "r")) != NULL)
{
while (fscanf(file, "%d\n", &num) == 1)
{
numbers[n] = num;
n++;
if (n >= max)
{
max = max * 2;
numbers = realloc(numbers, sizeof(int) * max);
}
}
fclose(file);
}
}
globfree(&globbuf);
printf("Collected numbers:\n");
for (i = 0; i < n; i++)
{
printf("%d\n", numbers[i]);
}
free(numbers);
return 0;
}
使用glob
功能,在单个操作中找到并匹配文件以获得正确的扩展名。每次空间不足时,使用realloc
在动态分配的数组中收集数字,其大小加倍。