3

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

根据此处所述如何在 C++ 中逐行读取 .gz 文件?我尝试了第二个答案,但它不起作用。

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

 ./run 1 file.txt 10

现在我跑

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

但是输出无效。我该如何解决?

PS:

该文件看起来像

10 1000
2   39
45 124

读取文件的代码看起来像

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

1 回答 1

2

在您的情况下,最简单的直接解决方法是更改​​此设置:

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
}

我已经替换finstd::cin. 如果你还没有这样做,你需#include <iostream>要这样做。

这将从 STDIN 读取,这是管道|发送zcat.

如果你想保留两个版本——一个从文件读取,一个从 STDIN 读取——你可以使用命令行参数来指示你正在从 STDIN 读取,然后if在代码中使用 - 子句来区分两者用法。

于 2013-06-20T07:22:50.627 回答