Maison > Questions et réponses > le corps du texte
我最近使用vs2013,读取了一个由matlab导出的.txt数据文件。数据大概是这样的:
1.6526799e-01 9.6253190e-02 1.6528841e-02 2.3563042e-02 9.5957121e-02 3.8080653e-03 1.9806023e-03 4.5839714e-03 1.5982644e-01 1.9387443e-02 1.7151608e-03 9.8825932e-03 3.9407861e-03 3.0627871e-05 0.0000000e+00 9.1577335e-03 1.8204186e-01 2.4951506e-02 3.2261358e-03 7.4017356e-03 6.2419602e-02 4.3083206e-03 7.2485962e-04 7.8815722e-03 5.3935681e-02 4.8187851e-03 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 3.6406330e-02 4.2735043e-02 1.8803419e-02 2.2222222e-02 0.0000000e+00 1.3675214e-02 1.5384615e-02 0.0000000e+00
是double型的,导出是科学记数法。
现在我写了这样的代码像读取它:
void returnfun(int nRows, int nDims, std::vector<double> & data)
{
data.resize(nRows*nDims);
std::ifstream fin("dataset1.txt");
while (!fin.eof())
{
for (int i = 0; i < nRows; i++)
for (int j = 0; j < nDims; j++)
fin >> data[i*nDims + j];
}
······
}
nRows和nDims是这个数据原始的维度,我在其他地方有用。
可是我想输出检测一下的时候发现结果并不对···
输出的代码如下:
for (int x = 0; x < nRows*nDims; x++)
{
if ((x+1)%nDims!=0)
printf("%.8f\t", data[x]);
else{
printf("%.8f\t", data[x]);
printf("\n");
}
}
输出的结果是:
感觉完全对不上···(2份数据都是从头截取展示的)
所以,我的问题是:
1.如何设计代码使得可以正确读入数据?
2.有没有方法像matlab那样,直接可以查看变量的情况?
问题较长,谢谢!
黄舟2017-04-17 13:42:35
1.读取函数和输出函数初看没问题,问题可能出在txt的格式上,可以把测试数据发我邮箱里,我写个测例。
email:luffygo@163.com
2.查看变量,vs中打断点就可以看到变量啊。
伊谢尔伦2017-04-17 13:42:35
经过我的测试,我发现其实真相是:
cmd窗口满了,第一个数据不再是输入数据的第一个···毕竟我的数据有19w个···
楼上说用lf,也很有道理,要保证输出的完整。