从命令行重定向到D程序

时间:2013-06-18 01:36:35

标签: terminal pipe d io-redirection

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

$ ./myprogram < data.txt

此文本文件由我要打印到屏幕的数字组成。到目前为止,我的计划包括:

import std.stdio, std.file;

void main(string[] args) {

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

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

2 个答案:

答案 0 :(得分:8)

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

import std.stdio, std.file;

void main(string[] args)
{
    foreach (line; stdin.byLine())
    {
        writeln(line);
    }
}

答案 1 :(得分:7)

您目前尝试将输入文件作为参数进行尝试,但您的程序从未看到过,因为当您输入重定向时:

  1. shell将该文件附加到输入流stdio;和
  2. 重定向位在获取之前完全从命令行中删除。
  3. 换句话说,当您像这样输入重定向时,数据会显示在标准输入流上,而不是通过参数显示。

    因此,您需要使用readln或类似内容来获取数据。

    UNIXy程序处理此问题的一种经典方法是检查它们的参数。如果存在,则打开文件并对其进行处理。如果参数 not ,则只使用标准输入。

    这允许您以多种不同的方式运行命令:

    testprog                           # uses standard input (terminal).
    testprog <myfile                   # uses standard input but from file.
    testprog myfile                    # opens file and uses it.