C#逐行读取文本,其中行分隔符是自定义的
我有一个字节数组(比如byte[]data),其中包含带有自定义行分隔符的文本,例如:“\r\n”(CRLF“\x0D\x0A”)、“\r”、“\n”、“\x0D\x0A\x0D”甚至“@” 目前,我将使用以下解决方案:C#逐行读取文本,其中行分隔符是自定义的,c#,.net,C#,.net,我有一个字节数组(比如byte[]data),其中包含带有自定义行分隔符的文本,例如:“\r\n”(CRLF“\x0D\x0A”)、“\r”、“\n”、“\x0D\x0A\x0D”甚至“@” 目前,我将使用以下解决方案: 将换行符规格化为CRLF(以下是如何规格化CRLF的示例) 使用StringReader逐行读取文本 using (String Reader sr = new StringReader(data.ToString())) { string line; whi
using (String Reader sr = new StringReader(data.ToString()))
{
string line;
while ((line = sr.ReadLine()) != null)
{
// Process the line
}
}
谢谢。这里有一个选项可以限制对
字符串的调用。将替换为仅使用多字符分隔符
private static readonly char[] DelimiterChars = { '\r', '\n', '@' };
private static readonly string[] DelimiterStrings = { "\r\n\r", "\r\n" };
后来
string text = Encoding.ASCII.GetString(data);
foreach (string delim in DelimiterStrings)
text = text.Replace(delim, "\n");
foreach (string line in text.Split(DelimiterChars))
{
// processing here
}
这里有一个选项可以限制对字符串的调用。将替换为仅使用多字符分隔符
private static readonly char[] DelimiterChars = { '\r', '\n', '@' };
private static readonly string[] DelimiterStrings = { "\r\n\r", "\r\n" };
后来
string text = Encoding.ASCII.GetString(data);
foreach (string delim in DelimiterStrings)
text = text.Replace(delim, "\n");
foreach (string line in text.Split(DelimiterChars))
{
// processing here
}
改用regexp,这将为您提供更大的灵活性 改用regexp,这将给您带来更大的灵活性 您应该将行尾标准化为\n
,这只需要2次替换,而不是3次。请注意,在您的链接中,答案首先规范化为\n
,然后才将\n
更改为\r\n
。是的,事实证明,我需要将行尾改为以下任意一种:“\r”、“\n”、“\r\n”行定义为一个字符序列,后跟换行符(“\n”)、回车符(“\r”),或紧接着换行符(“\r\n”)的回车符。结果字符串不包含终止回车和/或换行符。如果已到达基础字符串的结尾,则返回值为空引用(在Visual Basic中为Nothing)。为了获得最快的性能,您可以手动拆分它…您应该将行结尾规范化为\n
,这只需要2次替换,而不是3次。请注意,在您的链接中,答案首先规范化为\n
,然后才将\n
更改为\r\n
。是的,事实证明,我需要将行尾改为以下任意一种:“\r”、“\n”、“\r\n”行定义为一个字符序列,后跟换行符(“\n”)、回车符(“\r”),或紧接着换行符(“\r\n”)的回车符。结果字符串不包含终止回车和/或换行符。如果已到达基础字符串的结尾,则返回的值为空引用(在Visual Basic中为Nothing)。为了获得最快的性能,可以手动拆分它。。。