Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++中不同文本文件的组合_C++_Text Files - Fatal编程技术网

C++中不同文本文件的组合

C++中不同文本文件的组合,c++,text-files,C++,Text Files,我第四次在这个网站上。我来这里只是因为我的问题已经得到了回答。我的任务是将不同的文件和文本文件组合在一起。这些文件包括名字/等级,我有12个。基本上,我需要将所有这些文件合并到一个名为Grade1 Grade2等的文件中。。。 我已经成功地组合了几个词,但我就是不知道该如何找到哪些词被再次使用,相同的名称重复了好几次,因为它们出现在所有12个文件和文件中 如果有人能给我指出正确的方向,我将不胜感激。谢谢顺便说一下,这是我的代码: #include <iostream> #includ

我第四次在这个网站上。我来这里只是因为我的问题已经得到了回答。我的任务是将不同的文件和文本文件组合在一起。这些文件包括名字/等级,我有12个。基本上,我需要将所有这些文件合并到一个名为Grade1 Grade2等的文件中。。。 我已经成功地组合了几个词,但我就是不知道该如何找到哪些词被再次使用,相同的名称重复了好几次,因为它们出现在所有12个文件和文件中 如果有人能给我指出正确的方向,我将不胜感激。谢谢顺便说一下,这是我的代码:

#include <iostream>
#include <fstream>
using namespace std;

int main () 
{
ofstream myfile;
myfile.open ("example.txt");
std::ifstream file1( "Nfiles/f1.txt" ) ;
std::ifstream file2( "Nfiles/f2.txt" ) ;
std::ifstream file3( "Nfiles/f3.txt" ) ;
std::ofstream combined_file( "combined_file.txt" ) ;
combined_file << file1.rdbuf() << file2.rdbuf() << file3.rdbuf() ;
myfile.close();
return 0;
}

PS:通过快速搜索获得了fstream函数。直到现在才知道它们。

我将给你一个例子,假设你有两个文件,只有名称,更具体的是,你必须看到输入文件的结构

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


int main(int argv,char** argc)
{


  if(argv<3)
    {
      std::cout << "Wrong input parameters" << std::endl;
      return -1;
    }

  //read two files
  std::fstream input1;
  std::fstream input2;
  input1.open(argc[1]);
  input2.open(argc[2]);

  if((!input1)||(!input2))
    {
      std::cout << "Cannot open one of the files" << std::endl;
    }


  std::istream_iterator<std::string> in1(input1);
  std::istream_iterator<std::string> in2(input2);
  std::istream_iterator<std::string> eof1;
  std::istream_iterator<std::string> eof2;


  std::vector<std::string> vector1(in1,eof1);
  std::vector<std::string> vector2(in2,eof2);

  std::vector<std::string> names;

  std::copy(vector1.begin(),vector1.end(),back_inserter(names));
  std::copy(vector2.begin(),vector2.end(),back_inserter(names));

  //std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout," "));

  std::sort(names.begin(),names.end());
  auto it=std::unique(names.begin(),names.end());

  names.erase(it);

  std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout," "));

};
第二个文件2:

Paul
Mary
Simon
上面的代码将打印:约翰·玛丽·尼克·保罗·西蒙
它不会打印Paul两次

查看输入文件的简短示例会有所帮助。一种解决方案是读取所有名称并将其传递到向量中,然后使用std:unique和vector.erase删除重复项并将结果写入文件。但是最好显示输入文件的内部结构。组合是指从第一个文件中获取一部分,从第二个文件中获取一部分,从第三个文件中获取一部分等,然后从第一个、第二个、第三个等文件中获取第二部分?因为现在你只是把第一个文件的全部内容放在新的输出文件中,然后是第二个文件的完整内容,等等。太多的未知数:列表中名称的唯一性得到保证了吗?所有列表中的名称都有一对一的映射吗?一个列表是主列表吗?您希望如何处理异常?哇!我能很好地理解其中的一半。谢谢你,阿夫拉姆!但是假设两个文件对同一个人有不同的等级。两个文件的名称相同,但级别不同。如何将这些名称及其所有等级与名称放在同一行?如果每个文件的结构不同,代码将更加复杂,您必须按特定顺序指定输入参数,./a.out file1.txt file2.txt可能给出与。/a.out file2.txt file1.txt不同的结果,或者可能导致程序崩溃。最好将文件导入SQL数据库,比如说MYSQL,然后使用join。如果没有您的文件的特定结构,我就无能为力了:以下是所有文件。谢谢你的帮助!
Paul
Mary
Simon