我正在csv文件的每一行中准确提取14个令牌,我的问题是在任何令牌中如果有空格,我想保留它,但是我正在使用stringstream,所以当我尝试提取时数据,我排除了相同令牌之间的空格,并且输入不正确,之后将弄乱所有数据。我需要一种使用stringstream的方法,但仍然能够保留令牌中的空间。我正打算提取第三个令牌(以我的情况为准),但总的来说我很高兴如何获得任何令牌
例如:csv文件为:
PHIL,100,哲学概论,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();
}
这主要是我读取文件的地方,转储只是我用来输出要验证其是否正确的数据的功能:
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,我在真实数据中的“简介”之后也得到了很多0,所以这也让我感到困惑,因为我认为会得到我想要输入的令牌将具有的值,除非是因为最多13个其他字段是整数。
答案 0 :(得分:0)
Streams并不是非常适合您要解决的问题。尽管可以通过几种不同的方式来实现,但要使其正常工作,您将不得不经历很多麻烦。取而代之的是,仅读取整行/任何内容然后对字符串进行标记化就容易得多-我认为在这里使用正则表达式是很合理的。