0

这是我用来将数据从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

有人可以帮我吗?

4

1 回答 1

1

您的代码(尽管很糟糕)应该可以在这两个文件中正常工作。iostream输入运算符将输入视为,这意味着对于类似intdouble它们不关心值如何分隔(通过换行符或空格)的类型。

现在,仔细观察,我发现第二个文件使用逗号而不是小数点。有 3 种方法可以处理此问题:

  • 您可以强制将语言环境设置为将逗号视为小数点的语言环境(请参阅此问题
  • 您可以在程序读取文件之前使用脚本对文件进行预处理。
  • 最后,您可以先将每个数字读入一个std::string变量,然后使用 std::istringstream将其转换为double.

无论如何,您应该认真考虑阅读iostream使用情况。至少您应该检查输入错误。不,没有“ifstream bug”这样的东西。

于 2013-11-05T03:55:18.233 回答