首页 > 解决方案 > 在 CSV 中通过引用删除副本

问题描述

我有一个 CSV 文件,我正在尝试使用 C# 中的 String.Replace 将第一列详细信息替换为第二列值,这工作正常。但是接下来当我尝试用第 6 列值替换第 2 列时,它也会影响第 1 列值..?

string[] lines = File.ReadAllLines(file);

for(int i=1;i<lines.Length;i++)
{
    if (lines[i].Split(',')[1].Contains('.'))
    {
        lines[i] = lines[i].Replace(lines[i].Split(',')[0], lines[i].Split(',')[1]);
        lines[i] = lines[i].Replace(lines[i].Split(',')[1], lines[i].Split(',')[6]);
    }        
}

File.WriteAllLines(file,lines);

在此处输入图像描述

标签: c#csv

解决方案


对做什么有一个误解lines[i].Replace。如果单击它并按 F12 或 F1,您将看到它实际上是String.Replace(String, String).

文档中:“返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定字符串。

在您的代码中,您希望将值从第 2 列移动到第 1 列等。不要替换第 1 列值的所有出现。

for (int i = 1; i < lines.Length; i++)
{
    // your if here.
    var columns = lines[i].Split(',');
    columns[0] = columns[1];
    columns[1] = columns[5];
    lines[i] = string.Join(",", columns);
}

在下面的现场演示中,我删除了 if 并使用简单的字符串 [] 和字符串模拟 fileRead 和 Write。


推荐阅读