csv文件和转化成txt后用sstream读取
2016-09-27 22:06
155 查看
在一次进行课程实验时,遇到一个困难,形如:
这样的一个csv文件,我需要做到的一个步骤是读取每一行,并且将words中字符串都保存下来,然后再用数组记录下后面的6个数字。
开始的时候,用普通的文件流去读取csv文件,源代码如下:
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就是读取到的字符串了
}
}很多自己学到的东西,但是缺少使用就容易忘了。并且再次要用的时候如果没有自己的笔记就又要自己上网搜。
而且网上的东西太杂太乱,有自己的笔记容易养成自己的良好的习惯和形成自己的知识体系。都怪当初太年轻= = !也说明自己编程基础差,训练的不够多!
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就是读取到的字符串了
}
}很多自己学到的东西,但是缺少使用就容易忘了。并且再次要用的时候如果没有自己的笔记就又要自己上网搜。
而且网上的东西太杂太乱,有自己的笔记容易养成自己的良好的习惯和形成自己的知识体系。都怪当初太年轻= = !也说明自己编程基础差,训练的不够多!
相关文章推荐
- 小程序:将supermemo palm词库转化成的tab txt 文件转化为 Q&A 文件
- 请教Ado.Net按文本读取CSV/Txt文件时,如何禁止将内容转换成数字
- java导入大数量文件csv,txt,利用sqlloader导入
- 使用ArcGIS Online小贴士-Excel CSV TXT文件的使用
- 一个将Object转化为CSV文件的类
- 用VC把TXT文件转化成HTM文件
- 转化txt文本为plist文件
- C_读Csv文件、Execl并导入SqlServer数据库.txt
- Python程序:批理转化Excel成CSV文件
- 向PLSQL导入txt,csv文件
- 如何将TXT或CSV数据导入到EXCEL中让长数字不会变成科学计数法,转化成文本
- C#读取CSV,Excel,Txt文件,删除文件,拷贝文件
- [转]C#读取CSV,Excel,Txt文件,删除文件,拷贝文件
- txt或者csv数据文件的格式是有要求的,如下shell代码中说明。
- C++ 将通讯录txt文本文件导入到csv表格文件中
- 从文件(*.csv或*.txt)导入Oracle数据库Java源代码
- [转]C#读取CSV,Excel,Txt文件,删除文件,拷贝文件
- android 将.txt文件转化为.db并使用raw下的数据文件
- PL/SQL将txt(csv)文件导入数据到oracle
- oracle中导入txt或者csv文件