2011-03-20 96 views
0

如果我有一個選擇沿此線文件:在數據讀取從文件到一個數組

size = 4 
data = 1100010100110010 

而且我有一個2D尺寸*大小的數組,我想填充數據的值成,做這件事的最好方法是什麼?

爲了澄清,爲我有我想要的例子的陣列是這樣的:

INT [4] [4] =數組{{1,1,0,0},{0,1, 0,1},{0,0,1,1},{0,0,1,0}}。 (不是真實的代碼,但你明白了)。

大小可以真的是任何數字,但。

我在想我必須讀取大小,maloc數組,然後可能讀入一個充滿數據的字符串,然後遍歷數據中的每個字符,將其轉換爲int並將其粘貼到適當的指數?但我真的不知道如何去做,一直在尋找一些沒有運氣的東西。

任何幫助將很酷! :)

+3

你的方法很好。告訴我們你到目前爲止所嘗試過的以及你卡在哪裏。 – Mat 2011-03-20 08:09:14

回答

0
int process_file(int **array, char const *file_name) 
{ 
    int size = 0; 
    FILE *file = fopen(file_name, "rt"); 
    if(fp == null) 
     return -1;//can't open file 
    char line[1024]; //1024 just for example 
    if(fgets(line, 1024, file) != 0) 
    { 
     if(strncmp(line, "size = ", 7) != 0) 
     { 
      fcloes(file); 
      return -2; //incorrect format 
     } 
     size = atoi(line + 7); 
     array = new int * [size]; 
     for(int i = 0; i < size; ++i) 
      array[i] = new int [size]; 
    } 
    else 
    { 
     fclose(file); 
     return -2;//incorrect format 
    } 
    if(fgets(line, 1024, file) != 0) 
    { 
     if(strncmp(line, "data = ", 7) != 0) 
     { 
      fcloes(file); 
      for(int i = 0; i < size; ++i) 
       delete [] array[i]; 
      delete [] array; 
      return -2; //incorrect format 
     } 
     for(int i = 7; line[i] != '\n' || line[i] != '\0'; ++i) 
      array[(i - 7)/size][(i - 7) % size] = line[i] - '0'; 
    } 
    else 
    { 
     fclose(file); 
     for(int i = 0; i < size; ++i) 
      delete [] array[i]; 
     delete [] array; 
     return -2; //incorrect format 
    } 
    return 0; 
} 

不要忘記在程序結束之前刪除數組;

0

循環。

FILE *fp = fopen("waaa.txt", "r"); 
if(fp == null) { /* bleh */ return; } 

int j = 0; 
while(char ch = fgetc(fp)) { 
    for(int i = 0; i < 4; ++i) { 
     array[j][i] = ch; 
    } 
    ++j; 
} 

我不確定是否使用了fgetc()語法。請檢查它。它一次讀取一個字符。