gpt4 book ai didi

c# - 在 C# 中过滤流

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:31 27 4
gpt4 key购买 nike

在 C# 中逐行过滤流/阅读器的最简单方法是什么(有点像将 sed 放在管道中间)?

我想将 iCalendar 文件提供给 DDay.iCalDDay.iCal"VERSION:5.1.1" 上死机,因为它想要一个 numbernumber SEMICOLON number(其中 number 是数字(DOT 数字)?所以最后一个“.”是意外的)。

我想做的是将 VERSION: 行过滤为无害的内容,例如“VERSION:5.1”,这样解析器就不会死掉。

这是一个示例:

BEGIN:VCALENDAR
PRODID:-//SunONE/Calendar Hosting Server//EN
METHOD:PUBLISH
VERSION:5.1.1
X-NSCP-CALPROPS-LAST-MODIFIED:20011208T005613Z
X-NSCP-CALPROPS-CREATED:20010913T223336Z
X-NSCP-CALPROPS-READ:999
X-NSCP-CALPROPS-WRITE:999

现在,DDay.iCal 解析器不喜欢“VERSION:5.1.1”,所以我想用“VERSION:5.1”等无害的东西替换它。

解析器接口(interface)采用读取器或流。

无论如何,我尝试使用代码 here并且它有效(在过滤后的 ReadLine 之上重新实现 TextReader)。

最佳答案

System.IO.Stream 使用装饰器模式,因此可以很容易地创建自己的包装底层流的模式。这允许诸如 CryptoStream 和 GZipStream 之类的流包装任何其他 Stream 实例并有效地“覆盖”其读/写方法,而无需从您要扩展的类派生。四人帮一书中描述的非常灵活和流行的设计模式。

现在我不确定您使用的 API 是否需要 Stream 或 StreamReader。两者之间有显着的区别。 StreamReader 在文本 级别工作,并对字符/行进行操作。 Stream 在二进制级别工作并在字节上运行。换句话说,StreamReader 应该能够将字节解码为文本,这样消费者就无需担心编码问题。在编码无关紧要时(例如在压缩或加密时)使用 Stream,在处理文本数据时使用 StreamReader。

听上去,StreamReader 在这里更有意义。如果 API 可以接受 StreamReader,只需从 TextReader 派生您自己的 StreamReader 并覆盖其 ReadLine 方法,以便第一次调用返回您需要附加的文本行,后续调用将正常运行。

另一种选择是只使用 StringWriter/StringReader 并将其全部填充到内存中的字符串缓冲区中,对其进行操作,然后将其传递。

关于c# - 在 C# 中过滤流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com