我有一个c ++程序,它有一些命令行选项。其中一个是文件名。文件大小很大所以我决定压缩它,然后尝试找到一种方法,c ++程序读取压缩文件而不是纯文本文件。
根据这里所说的How to read a .gz file line-by-line in C++?我尝试了第二个答案,但它不起作用。
假设运行我的程序的正常命令行是
./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
}
答案 0 :(得分: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
}
我已将fin
替换为std::cin
。如果你还没有这样做,你需要#include <iostream>
。
这将从STDIN读取,这是管道|
发送zcat
输出的地方。
如果要保留两个版本 - 一个从文件读取,一个从STDIN读取 - 您可以使用命令行参数指示您正在从STDIN读取,然后具有if
- 子句在代码中区分这两种用法。