D言語では、すべての標準入力を読み取って文字列に割り当てる方法(タンゴライブラリを使用)?
2 に答える
2
http://www.dsource.org/projects/tango/wiki/ChapterIoConsoleから直接コピー:
import tango.text.stream.LineIterator;
foreach (line; new LineIterator!(char)(Cin.stream))
// do something with each line
1 行だけが必要な場合は、
auto line = Cin.copyln();
于 2010-03-06T18:07:59.660 に答える
1
Stdin の内容をダンプする別の、おそらくより効率的な方法は、次のようなものです。
module dumpstdin;
import tango.io.Console : Cin;
import tango.io.device.Array : Array;
import tango.io.model.IConduit : InputStream;
const BufferInitialSize = 4096u;
const BufferGrowingStep = 4096u;
ubyte[] dumpStream(InputStream ins)
{
auto buffer = new Array(BufferInitialSize, BufferGrowingStep);
buffer.copy(ins);
return cast(ubyte[]) buffer.slice();
}
import tango.io.Stdout : Stdout;
void main()
{
auto contentsOfStdin
= cast(char[]) dumpStream(Cin.stream);
Stdout
("Finished reading Stdin.").newline()
("Contents of Stdin was:").newline()
("<<")(contentsOfStdin)(">>").newline();
}
いくつかのメモ:
- Array の 2 番目のパラメーターは必須です。省略した場合、Array のサイズは大きくなりません。
- 4096 を使用したのは、これが一般的にメモリのページのサイズだからです。
dumpStream
ubyte[]
は UTF-8 文字列として定義されているため、 を返しますchar[]
。標準入力は必ずしもそうである必要はありません。たとえば、誰かがバイナリ ファイルをプログラムにパイプしたchar[]
場合、有効性をチェックすると例外がスローされる可能性のある無効なファイルが作成されます。テキストのみを気にする場合は、結果を a にキャストしてもchar[]
問題ありません。copy
提供されたすべての入力OutputStream
を排出させるインターフェイスのメソッドです。InputStream
于 2010-03-07T04:27:14.017 に答える