如何在一个文件中读取并垂直显示内容然后在另一个文件中读取并在c ++中垂直显示内容

时间:2013-04-03 13:49:58

标签: c++

嗨,我正在开发一个读取两个文件的程序,我想在自己的列中显示文件内容。

File1                File2
Time     data        Time    data

我不会放弃确定如何创建列,我已经有了代码来读取文件并执行所需的功能,这是我难以接受的输出。如果有人有任何建议或帮助,那将是非常棒的。谢谢! PS。这不是家庭作业相关。

2 个答案:

答案 0 :(得分:1)

这实际上取决于您计划使用的工具......

您可以使用某些版本的“curses”(具有控制台操作功能的库,例如“转到此位置”,“以绿色打印文本”等),然后随意浏览屏幕。

或者你可以将文件读入单独的变量,然后在循环中从每个文件打印。这不需要特殊编码。只需使用数组或向量作为文件本身以及从中读取的数据。

这样的事情:

const int nfiles = 2;

const char *filenames[nfiles] = { "file1.txt", "file2.txt" };

ifstream files[nfiles];
for(int i = 0; i < nfiles; i++)
{
   if (!files[i].open(filenames[i]))
   {
      cerr << "Couldn't open file " << filenames[i] << endl;
      exit(1);
   }
}
bool done = false;
while(!done)
{
   int errs = 0; 
   std::string data[nfiles];
   for(int i = i < nfiles; i++)
   {
       if (!(files[i] >> data[i]))
       {
          errs++;
          data[i] = "No data";
       }
   }
   if (errs == nfiles)
   {
      done = true;
   }
   else
   {
      for(int i = 0; i < nfiles; i++)
      {
           ... display data here ...
      }
   }
}

答案 1 :(得分:1)

我会做这样的事情:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <string>
using namespace std;

int readLines(const std::string& fileName1, const std::string& fileName2)
{
    string line1;
    string line2;
    ifstream file1 (fileName1.c_str());
    ifstream file2 (fileName2.c_str());
    if (file1.is_open() && file2.is_open())
    {
        cout << setw(20) << left << "File1" << "File2" << endl;
        bool done;
        done = file1.eof() && file2.eof();
        while (!done)
        {
            getline (file1, line1);
            getline (file2, line2);
            line1.erase(std::remove(line1.begin(), line1.end(), '\n'), line1.end());
            line2.erase(std::remove(line2.begin(), line2.end(), '\n'), line2.end());
            cout << setw(20) << left << (file1.eof() ? "" : line1) << (file2.eof() ? "" : line2) << endl;
            done = file1.eof() && file2.eof();
        }

        file1.close();
        file2.close();
    }
    else
    {
        cout << "Unable to open some file";
    }

    return 0;
}

int main ()
{
    std::string fileName1("example1.txt");
    std::string fileName2("example2.txt");
    readLines(fileName1, fileName2);

    return 0;
}