从命令行重定向到D程序

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程序中吗?

And*_*vić 8

您可以使用stdin读取这样的输入:

import std.stdio, std.file;

void main(string[] args)
{
    foreach (line; stdin.byLine())
    {
        writeln(line);
    }
}
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 7

你当前有什么尝试将输入文件作为参数,但你的程序永远不会看到,因为,当你输入重定向时:

  1. shell将该文件附加到输入流stdio; 和
  2. 在获取重定向位之前,将完全从命令行中删除重定向位.

换句话说,当您像这样输入重定向时,数据显示在标准输入流上而不是通过参数.

因此,您需要使用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)