我尝试用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/