如何使用 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 文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将一列中的两列合并为日期与熊猫?

如何将多个csv按行合并?(不是首尾相接的按列合并)

合并时如何使用列索引?

python将两个csv文件按列合并为一个csv

如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?

如何使用 Python Pandas 合并多个 CSV 文件