C#StreamReader,"ReadLine"用于自定义分隔符

Eri*_*ric 18 c# file-io parsing streamreader delimiter

获得方法功能的最佳方法是什么StreamReader.ReadLine(),但使用自定义(字符串)分隔符?

我想做点什么:

String text;
while((text = myStreamReader.ReadUntil("my_delim")) != null)
{
   Console.WriteLine(text);
}
Run Code Online (Sandbox Code Playgroud)

我尝试我自己的使用,使Peek()StringBuilder,但它的效率太低.我正在寻找建议或可能是一个开源解决方案.

谢谢.

编辑

我之前应该澄清一下......我已经看到了这个答案,但是,我不想将整个文件读入内存.

Eri*_*ric 4

我想我会发布我自己的解决方案。看起来效果还不错,而且代码也比较简单。欢迎发表评论。

public static String ReadUntil(this StreamReader sr, String delim)
{
    StringBuilder sb = new StringBuilder();
    bool found = false;

    while (!found && !sr.EndOfStream)
    {
       for (int i = 0; i < delim.Length; i++)
       {
           Char c = (char)sr.Read();
           sb.Append(c);

           if (c != delim[i])
               break;

           if (i == delim.Length - 1)
           {
               sb.Remove(sb.Length - delim.Length, delim.Length);
               found = true;
           }
        }
     }

     return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案仅在某些情况下有效。例如,如果分隔符是“xy”,那么该算法将错过“axxyb”中的分隔符,并且它将读取直到流末尾。 (4认同)
  • 如果您在“found = true”之后也加上“break”,那么(对我来说)会稍微清楚一些。需要较少的心理处理。 (2认同)