如何使用 Qt 将两个单列 csv 文件合并为一个多列 csv 文件? [关闭]
Posted
技术标签:
【中文标题】如何使用 Qt 将两个单列 csv 文件合并为一个多列 csv 文件? [关闭]【英文标题】:How to merge two single column csv files into one multi column csv file using Qt? [closed] 【发布时间】:2013-06-19 06:55:11 【问题描述】:第一个文件,file1.csv
4.001
3.002
3.003
4.004
第二个文件,file2.csv
100.8
102.4
121.9
107.5
我想要我的最终文件 final.csv 格式为
4.001 100.8
3.002 102.4
3.003 121.9
4.004 107.5
【问题讨论】:
这是作业题吗? 【参考方案1】:首先,很遗憾,问题作者没有做出任何努力来解决这个常见问题。或者,也许这是他的家庭作业? :)
Qt 的实现方式:
QFile file1("file1.csv");
file1.open(QIODevice::ReadOnly | QIODevice::Text);
QFile file2("file2.csv");
file2.open(QIODevice::ReadOnly | QIODevice::Text);
QFile res("final.csv");
res.open(QIODevice::WriteOnly);
QTextStream stream;
stream.setDevice(&res);
while (file1.atEnd() == false || file2.atEnd() == false)
QByteArray s1 = file1.readLine();
if (s1.endsWith("\n"))
s1.chop(1);
QByteArray s2 = file2.readLine();
if (s2.endsWith("\n"))
s2.chop(1);
stream << s1 << " " << s2 << "\n";
file1.close();
file2.close();
res.close();
【讨论】:
它仍然无法正常工作。能否请您提出更多更改建议!【参考方案2】:#include <fstream>
#include <iostream>
#include <string>
#include <algorithm>
std::vector<std::string>
split_string(std::string src, std::string delim)
std::vector<std::string> tokens;
std::string tmp = src;
size_t i = 0;
while (i < tmp.length())
int oi = i;
i = tmp.find(delim, i);
if(i != std::string::npos)
tokens.push_back(tmp.substr(oi, i - oi));
else
tokens.push_back(tmp.substr(oi));
break;
i += delim.length();
return tokens;
int
main(int argc, char* argv[])
std::ifstream file3("file3.csv");
std::string buf3;
std::getline(file3, buf3);
file3.close();
std::ifstream file2("file2.csv");
std::string buf2;
std::getline(file2, buf2);
file3.close();
auto vec3 = split_string(buf3, " ");
auto vec2 = split_string(buf2, " ");
int size = vec3.size();
for (int n = 0; n < size; n++)
std::cout << vec3[n] << " " << vec2[n];
if (n < size - 1)
std::cout << " ";
return 0;
啊,原来的问题已经更新了……天哪
那么,接下来
#include <fstream>
#include <iostream>
#include <string>
#include <algorithm>
int
main(int argc, char* argv[])
std::ifstream file1("file1.csv");
std::ifstream file2("file2.csv");
std::ofstream out("final.csv", std::ios::app);
std::string buf1;
std::string buf2;
while(file1 >> buf1)
file2 >> buf2;
out << buf1 << " " << buf2 << std::endl;
file1.close();
file2.close();
out.close();
【讨论】:
如果我们想将两个 2 列的 csv 文件合并为一个单独的 csv 文件,那么我们应该在上面的代码中做哪些更改?merge
是什么意思?【参考方案3】:
std::ifstream file1("file1.csv");
std::ifstream file2("file2.csv");
std::ofstream out("final.csv", std::ios::app);
std::string buf1;
std::string buf2;
while(file1 >> buf1)
file2 >> buf2;
out << buf1 << " " << buf2 <<std::endl;
file1.close();
file2.close();
out.close();
QFile file11("fil.csv");
file11.open(QIODevice::ReadOnly | QIODevice::Text);
QFile file22("final.csv");
file22.open(QIODevice::ReadOnly | QIODevice::Text);
QFile res("finally.csv");
res.open(QIODevice::WriteOnly);
QTextStream stream;
stream.setDevice(&res);
while (file11.atEnd() == false && file22.atEnd() == false)
QByteArray s1 = file11.readLine();
if (s1.endsWith("\n"))
s1.chop(1);
QByteArray s2 = file22.readLine();
if (s2.endsWith("\n"))
s2.chop(1);
stream << s2 << " " << s1 << "\n";
file11.close();
file22.close();
res.close();
【讨论】:
这适用于同一个问题!我自己试过了!以上是关于如何使用 Qt 将两个单列 csv 文件合并为一个多列 csv 文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?