C ++导入分隔文件到矢量

时间:2017-05-23 09:29:11

标签: c++ vector

我试图将下面显示的数据导入向量中,这样我就可以对它们进行一些简单的操作并最终绘制它们。我使用getline()跳过第一行,然后我可以成功地将所有列导入浮点向量,除了第一行,因为它包含一个字符串。有没有办法将此列导入浮点向量并指示它以某种方式每次导入时将NRM替换为0?

STEP  Xc (Am2)  Yc (Am2)  Zc (Am2)  MAG(A/m)   Dg    Ig    Dsp    Isp   a95
NRM  -1.67E-10  3.83E-09  9.71E-10  3.60E-04   2.5  14.2   2.5  14.2  0.0 
2    -1.51E-09  3.16E-09  2.53E-08  2.32E-03 115.6  82.1 115.6  82.1  0.0 
5    -6.57E-08 -4.05E-08  8.64E-07  7.89E-02 211.7  84.9 211.7  84.9  0.0 
7    -1.34E-07 -5.45E-08  1.65E-06  1.50E-01 202.2  85.0 202.2  85.0  0.0 

我用来导入数据的代码如下所示:

int main()
{
    ifstream theFile("spam.txt");

    string dummy;
    float column1;
    float column2;
    float column3;
    float column4;
    float column5;
    float column6;
    float column7;
    float column8;
    float column9;
    float column10;

    vector<float>stp;
    vector<float>mag;
    vector<float>dsp;
    vector<float>isp;

    getline(theFile, dummy);

    while(theFile >> column1 >> column2 >> column3 >> column4 >> column5 >> 
    column6 >> column7 >> column8 >> column9 >> column10)
    {
       stp.push_back(column1); **// doesn't work//**
       mag.push_back(column5);
       dsp.push_back(column8);
       isp.push_back(column9);
    }
}

任何建议将不胜感激:)

1 个答案:

答案 0 :(得分:1)

我首先读取字符串中第一列的值,如果它与"NRM"不同,则将其转换为浮点数。 BTW-如评论中所述 - 您可以考虑定义一个接管完整记录的结构,然后使用这种结构对象的向量。

std::string column1str;
while(theFile >> column1str >> column2 >> column3 >> column4 >> column5 >> 
    column6 >> column7 >> column8 >> column9 >> column10)
{
  if (column1str == "NRM") {
     column1 = 0.0;
  }
  else {
     try {
         column1 = std::stof(column1str);
     } catch( ... )
     {
       std::cout << "invalid value for column1: " << column1str << std::endl;
       column1 = 0.0;
     }
  }
  // proceed as you like; probably encapsulate values in a struct....
}