如果我想使用命令./run in.txt
多次读取文件,那么有一种直接的方法......
0- ofstream fin;
1- while (fin >> i) {...}
2- fin.clear(); fin.seekg(0);
3- while (fin >> i) {...}
但是,我想将压缩的输入文件传递给程序。命令是
bzcat file.bz2 | ./run
并且在代码中,我必须使用ofstream fin
而不是std::cin
。
while (std::cin >> i) {...}
当bzcat将最后一行发送到程序时,循环终止。现在......问题是,我怎样才能回到起始位置并告诉bzcat请再次发送行(从第一个到结尾)我将用std::cin
捕获它们?!
答案 0 :(得分:3)
管道内容在读取时消耗,如果需要多通道算法,则需要将这些值保留在内存中,您可以解压缩并运行该文件,否则您可以拆分程序进入多个阶段并一个接一个地运行它们:
// 1
std::vector<int> data;
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
std::back_inserter(data));
// operate on data
#2
$ bunzip2 file.bz2 && ./run file.bz2
# 3
$ bzcat file.bz2 | ./stage1 | ./stage2 ...