如何在 D 2.0 中将 InputRange!(dchar) 与 Stdin 一起使用?

发布于 2024-11-14 01:12:17 字数 577 浏览 2 评论 0原文

我正在尝试编写通用代码,可以将 lex any 字符流 (dchars) 写入任何地方......无论是来自文件还是来自 stdin< /code> 到另一个文件或 stdout

我该怎么做?

看起来 stdinstdoutInputRangeOutputRange 一起使用是痛苦(因为我每次都必须手动包装它们),并且我不能使用 std.stdio.Stream 因为它给我的是字节,而不是字符串......而且我找不到任何适配器来转换轻松地从一种转变为另一种。

如此有效,我找不到在程序中使用 stdin/stdout 的好方法

是否有像 .NET 的 TextReader 这样的东西可以抽象地将文本读取为 InputRange!dchar 而不管其输入是字符串、控制台还是文件?

I'm trying to write generic code that can lex any stream of characters (dchars) into anywhere... whether it's from a file or from stdin into another file or stdout.

How do I do this?

It seems like stdin and stdout are painful to use with InputRange and OutputRange (since I have to wrap them manuallly every time), and I can't use std.stdio.Stream because it gives me bytes, not strings... and I can't find any adapter to convert from one into the other easily.

So effectively, I can't find a good way to use stdin/stdout in my programs.

Is there something e.g. like .NET's TextReader that can abstractly read text as an InputRange!dchar regardless of whether its input is a string, the console, or a file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪冰清 2024-11-21 01:12:17

采用 dchar 输入范围的正确函数是:

void func(Range)(Range input)
    if(isInputRange!Range && is(ElementType!Range == dchar))
{}

但是,您必须有一个从 stdin 获取输入的输入范围。有人说需要重新设计 stdio/streaming,但尚未完成。 未记录的范围为 <对于标准输入,代码>dchar。

The proper function which takes a dchar input range is:

void func(Range)(Range input)
    if(isInputRange!Range && is(ElementType!Range == dchar))
{}

However, you must have an input range that gets its input from stdin. There is talk of needing to rework stdio/streaming which has not been done yet. There is an undocumented range of dchar for stdin.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文