从.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;
}