如何在C ++中使用','作为getline分隔符

时间:2018-10-25 17:41:31

标签: c++ fstream ifstream getline

这是我的代码。当我使用'\ t'作为定界符并以\ t分隔数据集时,它会起作用,但是当我使用','并将数据集以'\'分隔时,它将不起作用。

void TApp::LoadTree(char * fileName){
   ifstream in(fileName);
   char starID[200];
   double dRa,dDec,dU,dG,dR,dI,dZ;
   long w = 0;
   TStar * star;

   if (SlimTree!=NULL){

      if (in.is_open()){
         cout << "\nLoading objects ";
         while(in.getline(starID, 200, ',')){
            in >> dRa;
            in >> dDec;
            in >> dU;
            in >> dG;
            in >> dR;
            in >> dI;
            in >> dZ;
            in.ignore();
            star = new TStar(starID, dRa, dDec, dU, dG, dR, dI, dZ);
            SlimTree->Add(star);
            delete star;
            w++;
            if (w % 10 == 0){
               cout << '.';
            }//end if*/
         }//end while

我要读取的数据文件如下:

  

1237645876878180399,15.2062613727499,-1.02188584631684,-9999,-9999,-9999,-9999,-9999

1 个答案:

答案 0 :(得分:1)

我的猜测是,您有一个comma-separated values (i.e. a CSV)文件,其中逗号分隔了所有字段。

然后您的代码将无法工作,因为输入运算符>>对空格以外的分隔符一无所知。

它与制表符(或其他空白)一起用作分隔符,因为>>运算符跳过前导空白,并且也停止在空白处读取。


对于CSV文件,我通常建议您找到一个库来帮助您阅读和解析它们,因为CSV文件在上看似简单,但实际上可能包含许多特殊情况和特殊情况,使它们易于阅读不平凡的。

如果您仍然想尝试自己解析它们,那么我真的建议您首先阅读完整行并尝试分别解析每行。然后,您必须记住阅读每个字段之间的分隔符。