试图将一个gz文件提供给一个c++程序

Trying to feed a gz file to a c++ program

本文关键字:一个 c++ 程序 文件 gz      更新时间:2023-10-16

我有一个c++程序,它有一些命令行选项。其中之一是文件名。文件大小很大,所以我决定压缩它,然后尝试找到一种方法,c++程序读取压缩文件,而不是纯文本文件。

根据这里所说的,如何在c++中逐行读取。gz文件?我试了第二个答案,但它不起作用。

假设运行程序的正常命令行是

 ./run 1 file.txt 10

现在我运行

 zcat file.gz | ./run 1 file.gz 10

但是输出无效。我怎样才能解决这个问题呢?

p。S:

文件看起来像

10 1000
2   39
45 124

读取文件的代码看起来像

char *inp = argv[2];
std::ifstream fin (inp);
int a, b;
while (fin >> a >> b ) {
   // somthing
}

针对您的情况,最简单的即时解决方法是更改以下内容:

char *inp = argv[2];
std::ifstream fin (inp);
int a, b;
while (fin >> a >> b ) {
  // something
}

这:

char *inp = argv[2];
int a, b;
while (std::cin >> a >> b ) {
  // something
}

我用std::cin代替了fin。如果你还没有这样做,你需要#include <iostream>

这将从STDIN读取,这是管道|发送zcat输出的地方。

如果你想保留两个版本& & &;一个从file中读取,另一个从STDIN & & &;您可以使用命令行参数来指示您正在从STDIN中读取,然后在代码中使用if -子句来区分这两种用法。