2012-08-26 167 views
1

我有一個包含數字(整數)的行和列形式的文件(包括.dat和.txt格式)。我需要從這個文件中讀取 數字(整數)。該數據將被存儲在二維數組中。這個數組是在我的C程序中定義的。 我試圖在C中使用文件處理來實現這一點,但它並沒有讀取整個文件。 程序突然停止在文件中的某些數據並退出程序。 以下是用於此我的C代碼:從文件中讀取數字(整數)並將其存儲爲二維數組

#define ROW 512 

#define CLMN 512 


for(i = 0; i < ROW; i++) 

    { 

    for(j = 0; j < CLMN; j++) 

     { 

array[i][j] = 0; 

     } 

    } 

#include <stdio.h> 
#include <stdlib.h> 
#include <assert.h> 
#define EOL '\n' 

int main(){ 

int i = 0,j = 0,array[][];   //i is row and j is column variable, array is the  target 2d matrix 
FILE *homer; 
int v; 
homer = fopen("homer_matrix.dat","w"); //opening a file named "homer_matrix.dat" 
for(i=0;;i++) 
    { 
    for(j=0;;j++) 
    { 
      while (fscanf(homer, "%d", &v) == 1)   //scanning for a readable value in the file 
      { 
       if(v==EOL)          //if End of line occurs , increment the row variable 
        break; 
       array[i][j] = v;         //saving the integer value in the 2d array defined 
      } 
     if(v==EOF) 
      break;            //if end of file occurs , end the reading operation. 
    } 

    } 
fclose(homer);              //close the opened file 

for(i=0;i<=1000;i++) 
    { 
    for(j=0;j<=1200;j++) 
     printf(" %d",array[i][j]);       //printing the values read in the matrix. 

    printf("\n"); 
    } 


} 

謝謝你們的反應,但問題是別的東西.. 使用下面的代碼分配給2-d陣列的存儲

另外,我在下面的代碼中修改了'r'的權限。

homer = fopen(" homer_matrix.txt" , "r"); 

但是,我仍然無法將2-D條目放入我的變量'數組'中。

p.s.所述「homer_matrix.txt」是使用MATLAB生成通過以下命令:

CODE:

A=imread('homer.jpg'); 

I=rgb2gray(A); 

dlmwrite('homer_matrix.txt',I); 

此代碼將生成的文件「homer_matrix.txt」包含在768 X中的圖像的灰度值1024條目表單。

回答

1

以下代碼適用於您。 它會計算你的文本文件中有多少行和列。

do { //calculating the no. of rows and columns in the text file 
    c = getc (fp); 

    if((temp != 2) && (c == ' ' || c == '\n')) 
    { 
     n++; 
    } 
    if(c == '\n') 
    { 
     temp =2; 
     m++; 
    } 
} while (c != EOF); 
fclose(fp); 
2
int i = 0,j = 0,array[][]; 

這裏的array聲明無效。

+0

謝謝,我剛纔我的編輯與編輯的代碼的問題,這將是巨大的,如果你能幫助 –

+0

@JimmyThakkar如何是你的陣列'array'現正在申報?請顯示你的數組的聲明。 – ouah

+0

的#define ROW 234 的#define CLMN 327 INT主(無效) { INT I = 0,J = 0,陣列[ROW] [CLMN]; // i是行,j是列變量,array是目標2d //矩陣 –

0

你忘了你的陣列

int i = 0,j = 0,array[][]; 

分配內存,這應該是這樣的

#define MAXCOLS 1000 
#define MAXROWS 1000 
int i = 0,j = 0,array[MAXROWS][MAXCOLS]; 
1
homer = fopen("homer_matrix.dat","w"); 

這不是好主意,打開文本文件與標誌「W」閱讀。嘗試使用「rt」代替。

+0

編輯代碼,如果您有任何其他解決方案,請查看它,謝謝 –

+0

請將您的文本文件的幾行添加到您的問題或與Dropbox共享整個文件。com或者其他什麼,我會根據你的數據嘗試修復你的代碼。順便說一句,你確定導出和解析文本文件對你有好處嗎?我認爲如果你在matlab中導出二進制文件,然後在C程序中將它讀入內存將會更好。 – Tutankhamen

+0

感謝您的幫助,我找到了解決辦法。 –

相關問題