您的位置:首页 > 其它

csv文件和转化成txt后用sstream读取

2016-09-27 22:06 155 查看
在一次进行课程实验时,遇到一个困难,形如:

DocumentIDWords (split by space)angerdisgustfearjoysadsurprise
train1mortar assault leaves at least dead0.14860.01350.405400.43240
train2goal delight for sheva0000.709900.2901
train3nigeria hostage feared dead is freed0.081400.23530.29860.09050.2941
这样的一个csv文件,我需要做到的一个步骤是读取每一行,并且将words中字符串都保存下来,然后再用数组记录下后面的6个数字。
开始的时候,用普通的文件流去读取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就是读取到的字符串了
}
}很多自己学到的东西,但是缺少使用就容易忘了。并且再次要用的时候如果没有自己的笔记就又要自己上网搜。
而且网上的东西太杂太乱,有自己的笔记容易养成自己的良好的习惯和形成自己的知识体系。都怪当初太年轻= = !也说明自己编程基础差,训练的不够多!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: