【问题标题】:CSV file double-spacing linesCSV 文件双倍行距
【发布时间】:2018-07-04 14:03:00
【问题描述】:

OpenOffice Calc 打开我使用 StreamWriter C# 创建的 CSV 文件时遇到问题。当它打开时,它应该在每一行之间都有空行(双倍行距)。似乎有某种形式的回车加倍。当我在记事本中打开它时,它读取正确。当我将程序更改为写入整数而不是字符串时,问题就消失了。它似乎在每个字符串的末尾添加了一个返回,然后格式化添加了另一个我没有看到的返回。

输出看起来像这样......

1...

2...

3...

输出应该是这样的......

1...
2...
3...

这是我用来将列表写入文件的 ForEach 循环...

using (StreamWriter sw = new StreamWriter(@"c:\andy\Arduino StreamWriter.csv", false, Encoding.UTF8))
        {
            foreach (string element in SerialPortString)
            {
                sw.WriteLine(element);
            }
        }

每行只有一个数据字段,因此没有分隔符,只有新行。我尝试了格式化,以便在每个字段周围加上引号,希望可以消除 CSV 格式的混淆,但我也无法弄清楚。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 所以在记事本中看起来没问题?我猜element 字符串的末尾有一个 \n ?如果是这样,您最终会得到 \n\r\n - 记事本将忽略第一个 \n 其他关注 linux 结尾的应用程序不会。
  • 我刚回去进行此更改,确实消除了问题。但我不确定这是为什么。使用 Write 方法应该将列表的所有元素附加到第一行,但由于某种原因,循环会在每次写入后自动插入一个 Return。
  • 所有element 值的末尾必须有一个\n,即如果您在调试器中查看var x = Encoding.UTF8.GetBytes(element.ToString());,它可能是10。
  • watch 放在元素变量上,然后查看流末尾显示的其他字符。还要检查SerialPortStream 是如何填充的。

标签: c# csv streamwriter


【解决方案1】:

改变

sw.WriteLine(element);

sw.WriteLine(element.Trim());

或许

sw.WriteLine(element.TrimEnd());

首先修剪元素。这将删除字符“边缘”周围的任何换行符或其他空白字符。那么 StreamWriter 的 CRLF 将是唯一存在的换行符。

【讨论】:

  • TrimEnd() 效率更高。
  • 不要认为有一个 TrimEnd() 方法不希望删除字符数组...
  • 谢谢,这确实有效。我不确定它到底在修剪什么,但是将 Trim() 添加到元素中解决了这个问题。
  • 每行末尾会有一个换行符。在管道中的某个地方,您的数据被回车符分割,这将换行符作为碎片留在后面。
  • 我正在调试另一个设置,我发现 Serial.ReadLine() 正在向所有字符串添加“\r”。因此,它们都有“xxx\r”的值,这导致了第二次神秘回归。字符串都是数字,我看到的是“167\r”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多