D (Танго) Read весь стандартный вход и присваивают его строке

На языке D, как я могу считать весь стандартный вход и присвоить его строке (с библиотекой Tango)?

5
задан Sebtm 6 March 2010 в 17:46
поделиться

2 ответа

Другой, вероятно, более эффективный способ сбросить содержимое 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 необходим; если вы его опустите, массив не будет увеличиваться в размерах.
  • Я использовал 4096, поскольку это обычно размер страницы памяти.
  • dumpStream возвращает ubyte [] , потому что char [] определен как строка UTF-8, которой Stdin не обязательно должен быть. Например, если кто-то отправил двоичный файл в вашу программу, вы получите недопустимый char [] , который может вызвать исключение, если что-то проверяет его на достоверность. Если вас интересует только текст, можно привести результат к char [] .
  • copy - это метод интерфейса OutputStream , который заставляет его истощать предоставленный InputStream всех входных данных.
1
ответ дан 15 December 2019 в 06:23
поделиться

Скопировано прямо с 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();
2
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: