从.csv文件中读取文件,并提取出整数或者浮点数,最后在写入另一个.csv文件中。
#include <iostream> #include <fstream> #include <string> #include <vector> #include<algorithm> using namespace std; vector<vector<float> >a; //二维数组存储读入变量 vector<float>b; inline void file_to_string(vector<string> &record, const string& line, char delimiter); inline float string_to_float(string str); int main() { vector<string> row; string line; string filename; ifstream in("test.csv"); //读取工程文件下的.csv文件 if (in.fail()) { cout << "File not found" <<endl; return 0; } //读取失败,返回为假 while(getline(in, line) && in.good() ) { file_to_string(row, line, ','); //把line里的单元格数字字符提取出来,“,”为单元格分隔符 for(int i=0, leng=row.size(); i<leng; i++){ //cout << row[i] << " "; b.push_back(string_to_float(row[i])); } a.push_back(b); b.clear(); } in.close(); ofstream out("file1.csv"); //写入到文件file1 for(int i=0;i<a.size();++i){ for(int j=0;j<a[0].size();++j){ out<<a[i][j]<<','; } out<<'\n'; } out.close(); return 0; } inline void file_to_string(vector<string> &record, const string& line, char delimiter) { int linepos=0; char c; int linemax=line.length(); string curstring; record.clear(); while(linepos<linemax) { c = line[linepos]; cout<<c; //输出文件每行内容,分析后进行提取 if(isdigit(c)||c=='.'){ curstring+=c; } else if(c==delimiter&&curstring.size()){ record.push_back(curstring); curstring=""; } ++linepos; } cout<<'\n'; if(curstring.size()) record.push_back(curstring); return; } inline float string_to_float(string str){ int i=0,len=str.length(); float sum=0; while(i<len){ if(str[i]=='.') break; sum=sum*10+str[i]-'0'; ++i; } ++i; float t=1,d=1; while(i<len){ d*=0.1; t=str[i]-'0'; sum+=t*d; ++i; } return sum; }