如何读取和保留回车符和换行符

本文关键字:保留 回车 换行符 何读取 读取 | 更新日期: 2023-09-27 18:37:13

当读取流上的一行时(对我来说,它实际上是COM端口上的流),返回的字符串不包含'或''r字符(或''r'组合)。 出于日志记录目的,我想保留它们。 目前我的循环如下所示:

 while (newPort.BytesToRead > 0)
 {
     received = ReadLine(newPort);
     response.Add(received);
 }

所以基本上我正在读取一个字符串,然后将其添加到名为 response 的字符串列表中。我想要的是返回的字符串received包含原始流中的''r或'或''r',以及终止一行文本。

这是微不足道的可能吗? 甚至不平凡!

我猜这很难做到。 我的意思是考虑一下,如果我收到一个''r,我必须得到下一个字符,看看它是否是一个'。 如果没有下一个字符,我将超时并出现异常。如果有下一个字符并且它不是',我必须在下一次迭代中使其成为当前字符,依此类推...!

如何读取和保留回车符和换行符

您可以在

添加received后附加Environment.NewLine

更新 如果您需要逐字保留原始空格,那么使用 ReadLine 是没有意义的。在这种情况下,您可以使用ReadBlock来读取文件的较小块,或者ReadToEnd来获取整个内容。如果需要标记新行来处理消息,可以搜索原始字符串以进行规范化或标记化或任何您想要执行的操作。

以下是问题帖子中OP的解决方案:

好吧,我有一个裂缝。 这是我认为正确的... :

            {
                int s = 0, e = 0;
                for (; e < line.Length; e++)
                {
                    if (line[e] == ''n')
                    {
                        // 'n always terminates a line.
                        lines.Add(line.Substring(s, (e - s) + 1));
                        s = e + 1;
                    }
                    if (line[e] == ''r' && (e < line.Length - 1))
                    {
                        // 'r only terminates a line if it isn't followed by 'n.
                        if (line[e + 1] != ''n')
                        {
                            lines.Add(line.Substring(s, (e - s) + 1));
                            s = e + 1;
                        }
                    }
                }
                // Check for trailing characters not terminated by anything.
                if (s < e)
                {
                    lines.Add(line.Substring(s, (e - s)));
                }
            }
while (newPort.BytesToRead > 0)
 {
     received = ReadLine(newPort);
     response.Add(string.Format("{0}{1}", received, System.Environment.Newline);
 }