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. シェルはそのファイルを入力ストリームに添付します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 に答える