0

我有一个 CSV,其中我的一些数据有逗号(余额列)。

我需要能够删除此列.. 所以像这样

delete column where title = "balance"

但是在代码中。

有没有一种简单的方法可以做到这一点,或者我每次都在excel中启动它会更好..

4

3 回答 3

1

一般来说,您应该使用可用的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);
    }
}
于 2013-11-07T10:16:21.340 回答
0

那么首先你需要使用类似这样的东西来阅读 CSV

using System;
using System.IO;

class Program
{
    static void Main()
    {
        String[] values = File.ReadAllText(@"d:\test.csv").Split(',');
    }
}

然后您需要删除第 n 列并且必须使用String.Join()方法将其作为 CSV 文件推回。

于 2013-11-07T10:04:39.170 回答
0

根据问题的复杂程度,您几乎没有选择。从最简单到更强大列出:

  1. 逐行读取文件,使用 String.Split() 获取字段,将它们过滤掉并保存回来。
  2. 使用TextFieldParser
  3. 解析 CSV 并不是一个新问题。搜索现有的 LINQ to CSV 库,例如这个.
于 2013-11-07T10:12:14.247 回答