从 C++ 中的文本文件读取一定的偏移量

reading from text file in c++ at certain offset

本文关键字:偏移量 读取 文本 C++ 文件      更新时间:2023-10-16

>我有一个大小为 16000 * 16000 的对角线主导矩阵。我想为我的实验提取此矩阵的前 n 行和 n 列(例如前 100*100 个单元格(,以便提取的矩阵仍然是对角线主导的。我这样做的尝试是:

#include <stdio.h>
#include <string.h>
#include <mpi.h>
#include <stdlib.h>  
int main()
{
double **Matrix_A;
FILE *fp;   
int global_size = 100;
int offset = 0;
if ((fp = fopen ( "matrix_16000.txt", "r")) == NULL) {
               printf("Can't open input matrix file");
               exit(-1);
             }
 Matrix_A = (double **) malloc(global_size*sizeof(double *));
 for(int irow = 0; irow < global_size; irow++)
    {
    offset =  irow * 16000;
    fseek(fp, offset, SEEK_SET);
    Matrix_A[irow] = (double *) malloc(global_size * sizeof(double));
    for(int icol = 0; icol < global_size; icol++){
        fscanf(fp, "%lf", &Matrix_A[irow][icol]);
        }
    }
    fclose(fp);
    return 0;
 }

这将不起作用,因为偏移量不是固定的,因为矩阵是随机生成的。知道我的编译器是 mpicc 的任何更好的主意

你实际上非常接近。 fseek 不会起作用;而是扫描到 EOL:

 int c;
 Matrix_A = (double **) malloc(global_size*sizeof(double *));
 for(int irow = 0; irow < global_size; irow++) {
    Matrix_A[irow] = (double *) malloc(global_size * sizeof(double));
    for(int icol = 0; icol < global_size; icol++){
        fscanf(fp, "%lf", &Matrix_A[irow][icol]);
    }
    while ((c = fgetc(fp)) != EOF && c != 'r' && c != 'n') {}
 }
 fclose(fp);