c# - 在 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);
解决方案
对做什么有一个误解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。
推荐阅读
- stripe-payments - Stripe 没有这样的 payment_intent
- function - 将对象作为参数传递给函数:MATLAB
- javascript - Javascript递归问题
- c - Is there a cleaner way to print a coordinate system?
- angular - 使用电子角度路由
- android - ReqRes API 总是显示请求失败
- laravel - 如何显示来自多级类别laravel的数据?
- python - 用 Python 编写 Discord 机器人 - 不知道如何设置反应角色(第 2 部分)
- python - 如果正文中有html标签,如何创建一个返回博客文章阅读时间的Django模型函数?
- angular - 展开/折叠没有按钮或切换的 Mat-Expansion-Panels