0

一部のデータにコンマ (残高列) が含まれる CSV があります。

この列を削除できるようにする必要があります..だから、このようなもの

delete column where title = "balance"

しかし、コードで。

これを行う簡単な方法はありますか、それとも毎回Excelで起動したほうがよいでしょうか..

4

3 に答える 3

1

一般に、利用可能なCSV パーサーを使用する必要があります。そうしないと、車輪の再発明になります。たとえば、データにはセパレーターも含まれている可能性があると考えてください。

ただし、単純な方法は、この列以外をすべてロードすることです。

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

問題の複雑さに応じて、選択肢はほとんどありません。最も単純なものからより強力なものまでリスト:

  1. ファイルを 1 行ずつ読み取り、String.Split() を使用してフィールドを取得し、フィルターで除外して保存します。
  2. TextFieldParserを使用します。
  3. CSV の解析は新しい問題ではありません。このような既存の LINQ to CSV ライブラリを検索します。
于 2013-11-07T10:12:14.247 に答える
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 に答える