首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流结构化文本输入

流结构化文本输入
EN

Stack Overflow用户
提问于 2010-02-12 09:53:59
回答 1查看 294关注 0票数 2

我想从TextReader解析格式化的基本值和一些自定义字符串--本质上就像scanf允许的那样。

  • 我的输入可能没有换行符,所以ReadLine+Regex不是一个选项。我可以使用其他方式来分块文本输入;但是问题是,我在编译时不知道分隔符(所以这很棘手),而且这个分隔符可能依赖于本地化。例如,浮动和逗号后面的逗号可能是"1.5“或"1,5”,但在这两种情况下,试图解析浮点数的都应该是“贪婪”的。为了安全起见,我想假设我的输入是积极敌对的(例如,从网络流中流):即故意遗漏块delimiters.
  • I'd,以避免自定义Regex's: int.Parse和double.Parse很好地工作,并且具有本地化意识。不要让我从约会时间开始--无论如何,我可能需要一些自定义模式,但是编写Regexes来描述这个场景听起来并不有趣。

对于一个具体的例子,假设我有一个TextReader,并且我知道下一个值应该是一个double --我如何在不读取整个流和不手动编写一个可本地化的双解析器的情况下提取这个双值,可能是有限的查找量?

类似问题

前面还有一个类似的问题"Looking for C# equivalent of scanf“,但Q+A关注的是readline+regex (我想避免这种情况)。How can I use Regex against a TextReader?没有找到答案(除了分块),而且无论如何,我想避免写我自己的Regexes。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-01 16:11:19

由于缺乏答案,而且我自己仍然没有找到任何东西,看来

  • 没有办法直接从.NET中的流(或TextReaders)中使用本地化解析,也没有一种方法可以系统地知道流中有多少与可解析前缀对应。
  • 没有方法将正则表达式应用于.NET中的流(或TextReaders),因此没有简单的方法自己实现类似的东西。
  • 如果真的需要这样的东西,最简单的选项是一个成熟的解析器生成器。ANTLR对此非常有效;它有很多现有的语法,您可以复制粘贴作为基础,它附带了一个图形用户界面来帮助理解您的语法,并为.NET、java、C和许多其他语言提供解析器。它对开发者友好,快速....but太强大、太灵活,无法满足我的需要;就像用猎枪射击虫子一样--我对这个解决方案不感兴趣。--
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2250904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档