1

我想将 .txt 文件从命令行重定向到用 D 编写的可执行文件。

$ ./myprogram < data.txt

这个文本文件包含我想打印到屏幕上的数字。到目前为止,我的程序包括:

import std.stdio, std.file;

void main(string[] args) {

    string file = args[2];
    writeln(read(file));
}

但这是不正确的;有人可以解释一下重定向是如何工作的以及我如何将数据传输到我的 D 程序中吗?

4

2 回答 2

8

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

import std.stdio, std.file;

void main(string[] args)
{
    foreach (line; stdin.byLine())
    {
        writeln(line);
    }
}
于 2013-06-18T01:42:11.627 回答
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.
于 2013-06-18T01:41:33.797 回答