【发布时间】:2018-09-08 04:47:16
【问题描述】:
我在 csv 文件的每一行中准确提取 14 个标记,我的问题是,在任何标记中,如果其中有空格,我想保留它,但我使用的是 stringstream,所以当我尝试提取数据,我排除了同一个标记之间的空格,它没有正确输入,之后会弄乱所有数据。我需要一种使用 stringstream 的方法,但仍然能够在令牌中保留空格。我正在寻找准确提取第三个令牌(在我的情况下),但很高兴知道一般我如何获取任何令牌
例如:csv 文件是:
PHIL, 100, Intro to Philosophy, 6, Bobby,...(全部在一条线上)
我有一个构造函数,它引用了应该初始化我的数据成员的 stringstream 对象。当我找到一个通常有空格的标记时,它会停在一个空格处,在这个例子中,它只需要“Intro”,然后将它存储到我的 classTitle 变量中,但我想要整个“Intro to Philosophy”。我也有一个教师姓名字段,但一个人的名字中几乎没有空格。但总的来说,我如何保持间距?
这是我的构造函数:
Course( stringstream &ss ){
ss >> dept >> courseNumber >> courseTitle >> numAs >> numBs >> numCs >> numDs >> numFs >> numIs >> numNRs
>> numSs >> numUs >> numWs >> instructor;
dump();
}
这是我读取文件的主要位置,dump 只是我用来输出数据的函数,用于验证它是否正确:
string dummyLine; // string meant to be used to skip over first line
getline(gradeFile, dummyLine);
while ( gradeFile.good() ){ // read until the end of the file
stringstream ss;
getline(gradeFile, input); // r)ead a line of input, stop at a comma
replace(input.begin(), input.end() , ',', ' ');
ss << input;
Course course(ss);
if ( count == 0 ){
//course.dump();
}
count++;
break;
}
但实际上在我的输出中,即使 csv 文件中的数字不是 0,我的真实数据中的“Intro”之后也会出现一堆 0,所以这也让我感到困惑,因为我认为之后的每个标记这将获得我想要输入的令牌所获得的值,除非这是因为其他最多 13 个字段是整数。
【问题讨论】:
-
您可能会考虑另一种技术。 stackoverflow.com/questions/1120140/…
标签: c++ file stringstream