使用StreamReader.ReadLine读取具有特定NewLine char序列的行

时间:2016-10-04 06:20:55

标签: c# stream delimiter streamreader readline

有时我们需要从流中读取行,但只考虑特定的char序列作为换行符(CRLF,但不考虑CR或LF)。

如文档所述,

StreamReader.ReadLine将新行顺序视为CRLF,CR和LF。如果该行可以包含单个CR(“\ r”)或单个LF(“\ n”)作为业务价值数据,那么这可能是不可接受的。

需要能够逐行读取流,但由某些字符序列分隔。

1 个答案:

答案 0 :(得分:1)

这是一个从流中读取行并将其作为字符串返回的方法:

    public static string ReadLineWithFixedNewlineDelimeter(StreamReader reader, string delim)
    {
        if (reader.EndOfStream)
            return null;
        if (string.IsNullOrEmpty(delim))
        {
            return reader.ReadToEnd();
        }
        var sb = new StringBuilder();
        var delimCandidatePosition = 0;
        while (!reader.EndOfStream && delimCandidatePosition < delim.Length)
        {
            var c = (char)reader.Read();
            if (c == delim[delimCandidatePosition])
            {
                delimCandidatePosition ++;
            }
            else
            {
                delimCandidatePosition = 0;
            }
            sb.Append(c);
        }
        return sb.ToString(0, sb.Length - (delimCandidatePosition == delim.Length ? delim.Length : 0));
    }