有时我们需要从流中读取行,但只考虑特定的char序列作为换行符(CRLF,但不考虑CR或LF)。
如文档所述, StreamReader.ReadLine
将新行顺序视为CRLF,CR和LF。如果该行可以包含单个CR(“\ r”)或单个LF(“\ n”)作为业务价值数据,那么这可能是不可接受的。
需要能够逐行读取流,但由某些字符序列分隔。
答案 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));
}