我试图将下面显示的数据导入向量中,这样我就可以对它们进行一些简单的操作并最终绘制它们。我使用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);
}
}
任何建议将不胜感激:)
答案 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....
}