在一次进行课程实验时,遇到一个困难,形如:
DocumentID | Words (split by space) | anger | disgust | fear | joy | sad | surprise |
train1 | mortar assault leaves at least dead | 0.1486 | 0.0135 | 0.4054 | 0 | 0.4324 | 0 |
train2 | goal delight for sheva | 0 | 0 | 0 | 0.7099 | 0 | 0.2901 |
train3 | nigeria hostage feared dead is freed | 0.0814 | 0 | 0.2353 | 0.2986 | 0.0905 | 0.2941 |
开始的时候,用普通的文件流去读取csv文件,源代码如下:
int main(int argc, char* argv[])
{
ifstream file ( "Dataset_train.csv" );
string value;
int i = 0;
string line;
while(getline(file,line)) {
stringstream ss;
ss.clear();
ss.str(line);
string dict;
i++;
int j = 0;
while(ss>>dict)
{
j++;
cout<<dict<<" ";
}
cout<<j<<endl<<i<<endl;
}
}
后来发现输出结果是:
train3,nigeria hostage feared dead is freed,0.0814,0,0.2353,0.2986,0.0905,0.2941 6
通过了解才发现,csv文件同行的每个单元其实都是用逗号隔开的,那么其实一行的格式其实就是像上面那样的,我就该自己截取字符串并且保存下数字才行。
接着将csv文件都复制到了txt,那么面对的一个问题就是面对不定长的一串字符串之后要保存下固定的6个数字。
要将读取到的字符串保存到数字,容易联想到stringstream,不过还是不太清楚怎么用,翻了下大一下的软设备考资料,才发现解决方法:
while(getline(Input,line))
{
stringstream ss;
ss.clear();
ss.str(line);
string dict;
ss >> dict ; //读入train_这个没用的单词
int P_OF_EMO = 0;
while(ss>>dict) //读入每行的数据集内容的词汇
{
stringstream See(dict);
double doub;
See >> doub;
if(!See.fail())//是个数字
{
P[Lines][P_OF_EMO] = doub;
P_OF_EMO++;
}
else{ //不是数字就是普通字符了
//dict就是读取到的字符串了
}
}
很多自己学到的东西,但是缺少使用就容易忘了。并且再次要用的时候如果没有自己的笔记就又要自己上网搜。
而且网上的东西太杂太乱,有自己的笔记容易养成自己的良好的习惯和形成自己的知识体系。都怪当初太年轻= = !也说明自己编程基础差,训练的不够多!