这是我用来将data.csv
文件中的数据导入24个变量的一段代码:
#include <iostream>
#include <fstream>
using namespace std;
double xa = 0;
double ya = 0;
double Ta = 0;
double Ca = 0;
double Ma = 0;
double Da = 0;
double xb = 0;
double yb = 0;
double Tb = 0;
double Cb = 0;
double Mb = 0;
double Db = 0;
double xc = 0;
double yc = 0;
double Tc = 0;
double Cc = 0;
double Mc = 0;
double Dc = 0;
double xd = 0;
double yd = 0;
double Td = 0;
double Cd = 0;
double Md = 0;
double Dd = 0;
//__________________________________________________
int trash = 0; // ifstream bug (?) stuff
//___________________________________
int main() {
ifstream ifs ("data.csv"); ///LOADING
if (!ifs)
// process error
ifs >> trash;
ifs >> xa ;
ifs >> ya ;
ifs >> Da ;
ifs >> Ma ;
ifs >> Ca ;
ifs >> Ta ;
ifs >> xb ;
ifs >> yb ;
ifs >> Db ;
ifs >> Mb ;
ifs >> Cb ;
ifs >> Tb ;
ifs >> xc ;
ifs >> yc ;
ifs >> Dc ;
ifs >> Mc ;
ifs >> Cc ;
ifs >> Tc ;
ifs >> xd ;
ifs >> yd ;
ifs >> Dd ;
ifs >> Md ;
ifs >> Cd ;
ifs >> Td ;
当然(我猜......),它仅适用于此CSV结构(每行包含一个新的单个数据:)
63.64474122
5.21472834
0.40511019
0.26155648
0.00000000
0.00000000
34.45902482
15.62249852
0.22086168
0.00000000
0.44580498
0.00000000
82.11020306
14.02709406
0.50748794
0.00000000
0.00000000
0.15917872
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
0.00000000
出于显而易见的实际原因,我想将此文件结构用于CSV(制表符和换行符分隔):
63,64474122 5,21472834 0,40511019 0,26155648 0,00000000 0,00000000
34,45902482 15,62249852 0,22086168 0,00000000 0,44580498 0,00000000
82,11020306 14,02709406 0,50748794 0,00000000 0,00000000 0,15917872
0,00000000 0,00000000 0,00000000 0,00000000 0,00000000 0,00000000
有人可以帮助我吗?
答案 0 :(得分:1)
你的代码(尽管很糟糕)应该适用于这两个文件。 iostream
输入操作符将输入视为流,这意味着对于int
或double
类型,他们并不关心值是如何分开的(通过换行符或者通过空白)。
现在,仔细看看,我看到第二个文件使用逗号而不是小数点。有三种方法可以解决这个问题:
std::string
变量,然后使用std::istringstream
将其转换为double
。无论如何,您应该认真考虑阅读iostream
用法。至少你应该检查输入错误。不,没有“ifstream bug”这样的东西。