paste utilitiy -- merge lines of files

本文介绍了一个使用C++实现的简单文件合并工具,该工具能够将多个文本文件按顺序合并输出,适用于处理需要并排查看的数据文件场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
#include <vector>

#define SEP "\t"

class Line;
std::istream& operator >> (std::istream& is, Line & line);
std::ostream& operator << (std::ostream& os, Line const & line);

class Line
{
  private:
    friend std::istream& operator >> (std::istream& is, Line & line);
    friend std::ostream& operator << (std::ostream& os, Line const & line);
    std::string line_;
};

inline std::istream& operator >>(std::istream& is, Line & line)
{
  return std::getline(is, line.line_);
}

inline std::ostream& operator << (std::ostream& os, Line const & line)
{
  return os << line.line_;
}



int main(int argc, char** argv)
{
  std::vector< std::ifstream > fs;
  for(int i = 1; i < argc; ++i)
  {
    fs.push_back(std::ifstream(argv[i]));
  }
  std::istream_iterator<Line> end;   
  std::vector<std::istream_iterator<Line> > iters;
  for(int i = 1; i < argc; ++i)
  {
    iters.push_back(std::istream_iterator<Line>(fs[i-1]));
  }

  bool done = true;
  for(int i = 1; i < argc; ++i)
  {
    if(iters[i-1] != end) done = false;
  }

  while(!done)
  {
    done = true;
    for(int i = 1; i < argc; ++i)
    {
      if(i > 1)
      {
        std::cout << SEP;
      }

      if(iters[i-1] != end)
      {
        std::cout <<  *(iters[i-1]);
        ++iters[i-1];
        if(iters[i-1] != end) done = false;
      }  
      else
      {
        std::cout <<  "place_holder";
      }
    }
    std::cout << std::endl;
  } 

  return 0;
}


Usage:

paste.exe file1.txt file2.txt ... filen.txt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值