我尝试用C代码打开.dat文件时遇到问题。我所犯的错误可能对某些人来说非常明显,但我找不到它,所以我寻求您的帮助。
我的代码的重点是打开包含12.000.000个双数的.dat文件,并将其存储在cuDoubleComplex数组中,该数组的大小将为6.000.000变量(.dat的偶数变量表示实数部分和奇数变量虚数(我的意思是顺序,而不是变量的值)

这是我的代码的一部分:

#include "cuComplex.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main(void)
{
    int n = 12000000; //12.000.000
    int lse = n / 2;
    double *data = (double *)malloc(12000000 * sizeof(double));
    double *data2 = (double *)malloc(12000000 * sizeof(double));
    FILE *f, *f2;
    cuDoubleComplex *se, *se2;

    f = fopen("ref_PRI20.dat", "r");
    fread(data, sizeof(double), n, f);
    fclose(f);

    f2 = fopen("surv_PRI20.dat", "r");
    fread(data2, sizeof(double), n, f2);
    fclose(f2);


    for (int a = 0; a < n; a++)
    {
        printf("%f\n", data2[a]);
    }


    se = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
    se2 = (cuDoubleComplex*)malloc(lse * sizeof(cuDoubleComplex));
    for (int a = 0; a<n / 2; a++)
    {
        se[a].x = data[2 * a];
        se[a].y = data[2 * a + 1];
        se2[a].x = data2[2 * a];
        se2[a].y = data2[2 * a + 1];
    }
free(data);
free(data2);

}


我添加了printf行和bucle只是为了检查,我得到的只是“ 0,0000”作为值。尽管当我继续编程时,se和se2数组似乎获得了随机值。
我知道数组的大小很大,但是我需要处理那么多数据。

我也曾尝试在matlab上工作,但那里没有任何错误。这是我在matlab中使用的代码,一切都很好,所以我想.dat文件没有问题,而仅是我的代码有问题。

f = fopen ("ref_PRI20.dat", 'r');

Data = fread (f, 12e6, 'double');
fclose (f);

dat=(Data(1:2:end)+1i*Data(2:2:end)).';


这是对输入数据的扫描,因此您可以看到格式。希望对您有所帮助。

enter image description here

任何帮助将不胜感激。

最佳答案

对malloc或fopen的原始代码没有错误检查。
由于评论说文件是在文本阅读器中打开的,并且值之间有逗号,因此应使用fscanf输入值,而不是fread。
由于必须一次扫描一个值,因此不需要data或data2指针。
无法编译此文件,因为我没有cuComplex.h

#include "cuComplex.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

int main(void)
{
    int n = 12000000; //12.000.000
    int lse = n / 2;
    FILE *f, *f2;
    cuDoubleComplex *se, *se2;

    f = fopen("ref_PRI20.dat", "r");

    f2 = fopen("surv_PRI20.dat", "r");

    se = malloc(lse * sizeof(cuDoubleComplex));
    se2 = malloc(lse * sizeof(cuDoubleComplex));
    for (int a = 0; a < lse; a++)
    {
        if ( 1 != fscanf ( f, "%lf ,", &se[a * 2].x])) {
            fprintf ( stderr, "could not scan double\n");
            break;
        }
        if ( 1 != fscanf ( f, "%lf ,", &se[a * 2 + 1].y)) {
            fprintf ( stderr, "could not scan double\n");
            break;
        }
        if ( 1 != fscanf ( f2, "%lf ,", &se2[a * 2].x)) {
            fprintf ( stderr, "could not scan double\n");
            break;
        }
        if ( 1 != fscanf ( f2, "%lf ,", &se2[a * 2 + 1].y)) {
            fprintf ( stderr, "could not scan double\n");
            break;
        }
    }
    fclose(f);
    fclose(f2);
    free ( se);
    free ( se2);
    return 0;
}

关于c - 当我尝试打开.dat文件时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46630444/

10-14 06:41