ifstream&&ofstream的.csv文件读写

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


猜你喜欢

转载自blog.csdn.net/u011721440/article/details/77365924