【问题标题】:C# undo file.ReadLine()C# 撤消文件.ReadLine()
【发布时间】:2011-12-08 14:15:03
【问题描述】:

我正在阅读巨大的文本文件(1.8 GB)

     while ((j = file.ReadLine()) != null) {...}

但是,经过一些操作后,我陷入了一种情况,当我想“撤消”最后一个 ReadLine 时,下一个 ReadLine 实际上会读取完全相同的行。

有什么办法吗? :)

同样的工作会在没有任何阅读的情况下进行“查看下一个字符”,这样我就可以根据这个字符来决定是否要阅读下一行。

示例:

    >1
    abc
    def
    >2
    ghi

使用 ReadLine() 读取“def”后,我想知道下一行是否包含“>”字符或者是否只有字母。

非常感谢。

【问题讨论】:

    标签: c# readline


    【解决方案1】:

    对于“查看下一个字符”,请使用 Peek() 方法:

    http://msdn.microsoft.com/en-us/library/system.io.streamreader.peek(v=VS.100).aspx

    【讨论】:

    • 非常感谢。我找到了这个,但与 int 返回值(预期的字符)混淆了:))但当然 62 代表“>”。再次感谢,祝您有美好的一天!
    • 他们使用 int 以便在没有内容可读取时返回 -1。
    • @Perlnika 如果它对您来说是正确的,请不要忘记接受它:)
    • 我刚刚接受了:) 这一切都适用于检查 file.Peek()==(62)
    • 您可以考虑将 '>' 从 char 转换为 int,而不是直接使用值 62。否则阅读代码的人必须猜测数字代表什么。谢谢采纳!
    【解决方案2】:

    要查看下一个字符,您可以使用方法Peek

    这将返回下一个字符,而不会更改您在文件中的位置。

    【讨论】:

      【解决方案3】:

      您真正寻找的是finite state machine。您应该将状态设置为 current is 'def', check for '>' 并在下一次迭代中执行必要的操作,而不是尝试查看您的下一个输入(可能存在也可能不存在或有效)。

      【讨论】:

        猜你喜欢
        • 2011-03-31
        • 2013-07-29
        • 2015-08-05
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2014-06-13
        • 2012-05-11
        • 1970-01-01
        相关资源
        最近更新 更多