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