600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > C++按列读取txt文件并保存 替代excel处理

C++按列读取txt文件并保存 替代excel处理

时间:2019-06-09 05:16:30

相关推荐

C++按列读取txt文件并保存 替代excel处理

C++按列读取txt文件并保存,替代excel处理

问题描述

原内容为txt格式,每行数据以“逗号”为分割。目标为提取其中4、5列,单独以“空格”为分割存储到新的txt文件中。

使用方法

在命令行中输入

g++ extract.cpp -o extract

(extract.cpp为本cpp名称,extract为可执行文件名称)在命令行输入

./extract in.txt out.txt

(in.txt为原数据文件,out.txt为输出文件名。假如在cpp程序中修改了默认值,也可以直接./extract即可。

程序

#include <iostream>#include <fstream>#include <sstream>#include <cassert>#include <string>#include <vector>#include <iomanip>using namespace std;int main(int argc, char ** argv){//输入文件和输出文件赋默认值string filename_in,filename_out;filename_in = "./111.txt";filename_out = "./222.txt";//通过可执行文件传参if (argc < 2){cout << "use the default path" << endl;}else{filename_in = argv[1];filename_out = argv[2];}cout << "filename_in = " << filename_in << endl;cout << "filename_out = " << filename_out << endl;//以只读形式(ios::in)打开输入文件ifstream file_in;file_in.open(filename_in, ios::in);if(!file_in.is_open()){cout << "failed in openning " << filename_in <<endl;return 0;}//以覆盖形式(ios::trunc)打开输出文件ofstream file_out;file_out.open(filename_out, ios::trunc);if(!file_in.is_open()){cout << "failed in openning " << filename_out <<endl; }//按行读取并存储到lines容器中vector<string> lines;string temp;while(getline(file_in, temp)){lines.push_back(temp); }//提取每行第4、5个元素,以空格为分隔for (auto it = lines.begin()+1; it != lines.end(); it++){istringstream line(*it); //单行数据string temp;//单行中第i个数据int i = 0;//原始数据以逗号分隔while(getline(line, temp, ',')){//以6为固定精度输出每行第4、5个元素,stod为string转doubleif(i == 4)file_out << fixed << setprecision(6) << stod(temp) << " "; //以空格为间隔,需要可改为逗号等其他符号if(i == 5)file_out << fixed << setprecision(6) << stod(temp) << endl; //没读取一行换行保存,不需要则可以替换endl为其他符号i++;}}//关闭输入输出文件file_in.close();file_out.close();return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。