【问题标题】:Import tab-and-newline-separated CSV data into variables将制表符和换行符分隔的 CSV 数据导入变量
【发布时间】:2013-11-05 03:49:26
【问题描述】:

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

有人可以帮我吗?

【问题讨论】:

  • 对不起,示例中的逗号,我的意思是浮点数!

标签: c++ csv import tabs


【解决方案1】:

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

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

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

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

【讨论】:

  • 嗯,是的,我是错误,我知道...但是,对于第二个文件结构(表格),此代码不起作用。您提到“换行符”和“空格”作为分隔符,它也不能用空格来表示......对不起,我是一个如此疯狂的神秘 C++ 用户,这真的不是我的职业......
  • 请参阅上面的说明。
  • 谢谢,这是我的错误...我测试的文件使用了小数点(不是逗号)并且没有正确加载...但很高兴知道我可以使用逗号...
猜你喜欢
  • 2021-02-23
  • 2021-08-26
  • 2014-08-31
  • 1970-01-01
  • 2017-06-21
  • 2013-06-11
  • 2021-10-20
  • 2015-07-20
  • 2019-06-03
相关资源
最近更新 更多