我想将.txt文件从命令行重定向到用D编写的exetuable。
$ ./myprogram < data.txt
此文本文件由我要打印到屏幕的数字组成。到目前为止,我的计划包括:
import std.stdio, std.file;
void main(string[] args) {
string file = args[2];
writeln(read(file));
}
但这不正确;有人可以解释一下重定向的工作方式以及如何将数据传输到我的D程序中吗?
答案 0 :(得分:8)
您可以使用 stdin 来读取输入:
import std.stdio, std.file;
void main(string[] args)
{
foreach (line; stdin.byLine())
{
writeln(line);
}
}
答案 1 :(得分:7)
您目前尝试将输入文件作为参数进行尝试,但您的程序从未看到过,因为当您输入重定向时:
stdio
;和换句话说,当您像这样输入重定向时,数据会显示在标准输入流上,而不是通过参数显示。
因此,您需要使用readln
或类似内容来获取数据。
UNIXy程序处理此问题的一种经典方法是检查它们的参数。如果存在,则打开文件并对其进行处理。如果参数 not ,则只使用标准输入。
这允许您以多种不同的方式运行命令:
testprog # uses standard input (terminal).
testprog <myfile # uses standard input but from file.
testprog myfile # opens file and uses it.