2016-11-13 24 views
0

行列が格納されているファイルを読み込もうとしています。私のソースファイルには、サイズがrows*colsのバッファがあります。行列は行の大部分の順序で格納されます。私はこのように行列の行を読み込むfreadを使用する:freadを使って1つのバッファで2次元配列の異なる行を読み取る

BUF [0..row-1] =最初の行

BUF [行.. 2ROW-1] =第二列

など。これを行うにはfreadを使用できますか?それ以外の選択肢はありませんか?

だからここで私は、コードの観点で書かれたものだ。しかし

for(k = 0; k<row*cols;k++) 
{ 
fread(buf,sizeof(double), row*cols*k,&fp); 

} 

、私は上記の擬似コードで述べたように、私はbuf[0..row-1]はそうで行2とを含むように、行0、buf[row..2row-1]を含むようにしたいです。

+1

はいことが可能です。 – kaylum

+0

説明できますか? –

+0

いいえ、それは少なくともそれをコード化しようとするあなたの仕事です。あなたがそれをしたときに戻ってください。あなたのコードを表示し、特定の質問をしてください。 – kaylum

答えて

2

サンプルコード

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <assert.h> 

int main(void){ 
    int rows = 4, cols = 3; 
    double matrix[rows][cols]; 
    double buf[rows*cols]; 
    assert(sizeof(matrix) == rows*cols*sizeof(double)); 

    srand(time(NULL)); 
    //make matrix 
    puts("original matrix"); 
    for(int r = 0; r < rows; ++r){ 
     for(int c = 0; c < cols; ++c){ 
      matrix[r][c] = (double)rand()/RAND_MAX; 
      printf("%f ", matrix[r][c]); 
     } 
     puts(""); 
    } 

    //write file 
    FILE *fp = fopen("data.dat", "wb"); 
    fwrite(matrix, sizeof(matrix), 1, fp); 
    fclose(fp); 

    //read file to 1D buf 
    fp = fopen("data.dat", "rb"); 
    fread(buf, sizeof(double), rows*cols, fp); 
    fclose(fp); 

    puts("\nread matrix as 1D"); 
    for(int r = 0; r < rows; ++r){ 
     for(int c = 0; c < cols; ++c){ 
      printf("%f ", buf[r * cols + c]); 
     } 
     puts(""); 
    } 

    double buf_of_one_row[cols]; 
    //read file each row 
    fp = fopen("data.dat", "rb"); 
    puts("\nread matrix as 1D each row"); 
    for(int r = 0; r < rows; ++r){ 
     fread(buf_of_one_row, sizeof(double), cols, fp); 
     for(int c = 0; c < cols; ++c){ 
      printf("%f ", buf_of_one_row[c]); 
     } 
     puts(""); 
    } 
    fclose(fp); 
} 
+0

私は解決策を見ています。アシスタンスありがとう –

関連する問題