我有一个 CSV,其中我的一些数据有逗号(余额列)。
我需要能够删除此列.. 所以像这样
delete column where title = "balance"
但是在代码中。
有没有一种简单的方法可以做到这一点,或者我每次都在excel中启动它会更好..
一般来说,您应该使用可用的CSV parser,否则您正在重新发明轮子。例如,考虑到数据也可以包含分隔符。
但是,一个简单的方法是加载除此列之外的所有内容:
string[] csvLines = File.ReadAllLines("csvFile.txt");
string header = csvLines.FirstOrDefault(l => !String.IsNullOrWhiteSpace(l));
if(header != null)
{
int balanceIndex =Array.FindIndex<string>(header.Split(new[]{','}, StringSplitOptions.RemoveEmptyEntries)
, col => col.Equals("balance", StringComparison.OrdinalIgnoreCase));
if(balanceIndex >= 0)
{
var allButBalanceCols = csvLines
.Select(l => new {Columns = l.Split(new[]{','}, StringSplitOptions.None) })
.Where(x => x.Columns.Length > balanceIndex)
.Select(x => string.Join(",", x.Columns
.Where((col, index) => index != balanceIndex)
.Select(col => col.Trim())));
// rewrite the file with all columns but balance:
File.WriteAllLines("csvFile.txt", allButBalanceCols);
}
}
那么首先你需要使用类似这样的东西来阅读 CSV
using System;
using System.IO;
class Program
{
static void Main()
{
String[] values = File.ReadAllText(@"d:\test.csv").Split(',');
}
}
然后您需要删除第 n 列并且必须使用String.Join()方法将其作为 CSV 文件推回。
根据问题的复杂程度,您几乎没有选择。从最简单到更强大列出: