【问题标题】:Removing new lines in pipe-separated file删除管道分隔文件中的新行
【发布时间】:2017-01-05 23:39:12
【问题描述】:

我有一些 CSV 格式的文件,用竖线分隔。

我需要文件的每一行都在一行中,但我有一些这样的文件:

0001|Some text|Some longer text that \r\n has new lines on it|1234

所以,这意味着第一行现在是两行。

我说的是现在有大约 12000 行的 5000 行文件。我需要替换的列总是第二个和第三个,第一和第四个总是数字。

我需要将文件某些列中的\r\n 替换为一个空格,因此行只占一行。

如何在 Microsoft C# 中执行此操作?

【问题讨论】:

  • 文件编码是什么?
  • \n 只是换行符,在 Windows 上真正的换行符是 \r\n,所以如果该行真的有 \n 如果你用 StringReader 阅读它,你只会在一行中得到这些,所以您可以逐行读取,使用 Replace("\n", "") 并将其写入另一个文件。
  • 新数据行的开头总是有管道吗?
  • 第一个“行”真的在两个不同的行中,还是只是其中的字符串\n
  • 用 File.ReadAllText() 将文件打开成一个字符串。如果 \r\n 总是在你的第三列。然后您可以通过管道拆分字符串,并且在 for 语句中始终递增 3 并删除该字符串的 \r\n 。如果正确,您将始终使用“第三列”

标签: c# string csv replace


【解决方案1】:

如果您要替换的换行符总是在第三列,您可以执行以下操作:拆分字符串,每隔三列替换换行符,然后重新加入字符串:

string text = File.ReadAllText(@"C:\users\sjors\desktop\in.txt");

string[] values = text.Split('|');

StringBuilder SB = new StringBuilder();

for(int i = 0; i < values.Length; i++)
{
    if ( (i + 1) % 3 == 0 )
        values[i] = values[i].Replace("\r\n", " ");

    SB.Append(values[i] + "|");
}

// Trim end to remove the trailing |
File.WriteAllText(@"C:\users\sjors\desktop\out.txt", SB.ToString().TrimEnd('|'));

【讨论】:

  • 原来我测试错了,我马上更新。编辑:固定
  • 如果它可能会出现,或者其他列呢? (我有更多文件有同样的问题)
  • @sant016 您可以对每一列执行相同的技巧,只需更改(i + 1) % 3 行。 % 是一个模运算符。如果一行的最后一列有额外的换行符,您可以替换所有换行符,然后在该列的末尾添加一个额外的 \r\n
  • @SjorsOttjes 一切都很完美,唯一的问题是(i+1) % 3 不能正常工作,这是因为总是有四列,所以如果你想在列之间移动,你需要@ 987654325@。非常感谢!
【解决方案2】:

你可以试试这个简单的代码:

        string so = System.IO.File.ReadAllText(@"C:/yourPath/yourOldCSV.CSV");

        string[] arr = so.Split('|');

        //To check if it is on 3rd column
        for (int i = 2; i < arr.Length; i = i + 3)
        {
            arr[i] = arr[i].Replace("\r\n", "");
        }

        string res = String.Join("", arr);

        System.IO.File.WriteAllText("C:/yourPath/yourNewCSV.CSV", res);

【讨论】:

  • 唯一的问题是我需要在一行中的每个寄存器,这样寄存器将在最后一列与第一列混合。谢谢!
  • 不应该。因为最后一列没有被编辑,你的“\r\n”仍然存在
  • 如果您按| 拆分,最终您将得到最后一列与第一列连接。如果您将\r\n 替换为空,则第一列和最后一列将混合在一起。
  • 你说得对,我没有看到for 上的增量。谢谢,
猜你喜欢
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多