2011-03-12 79 views
0

我想知道什麼是最有效的方式來逐行讀入文件的目錄到數組中。我的任務是在一個目錄中搜索以特定擴展名結尾的文件,並讀取該文件的每行只包含每行上的整數到單個維度數組中。然後移至下一個文件並將該文件的每一行添加到現有數組中。我在看reading a text file into an array in c,並認爲我可以修改Johannes的例子以適應我的情況。提前致謝。遍歷文件目錄並將每行讀入數組

編輯:

道歉傢伙時,我說,高效的I是在內存分配方面。它也必須在c。我已經添加了作業標籤,並且將研究glob上的手冊頁。將回報。

+0

你必須在C中做到這一點嗎? – 2011-03-12 18:43:11

+0

我不太明白這個問題。你正在掃描文件的目錄層次結構,還是正在掃描文件中的文本?如果它是先前的,那麼我建議你看一下'glob'函數('man 3 glob')。如果後者,你已經在正確的軌道上(並且可能希望查看其中的''strstr''功能)。進一步闡述你真正想做什麼可能會產生更準確的答案。 – gamen 2011-03-12 19:08:07

+2

在程序員時間,執行時間,執行空間等方面效率最高? 「最高效」需要更多的澄清。 – mpez0 2011-03-13 01:06:35

回答

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