2017-04-12 2 views
2

データのクレンジング練習の一環として、csvファイルの書式を修正する必要があります。string.Join Linq配列から2つの文字列をマージし、1つのカンマ区切り文字列として出力する

フォーマットが不適切/引用符がないため、説明フィールドの余分なカンマがDTSパッケージを破損しています。

これを回避するために、ヘッダ行よりも多くの列を含むcsvの行を見つけるための単純なC#スクリプトを作成しました。

行にヘッダーよりも多くの列が含まれている場合、配列項目[10]と[11]を1つの列にマージし、その行を新しいファイルに書き出します。

コード:

var columns = splitExpression.Split(line).Where(s => s != delimiter).ToArray(); 

    if (headers == null) headers = new string[columns.Length]; 

    if (columns.Length != headers.Length) 
    { 
     // TODO - Linq to write comma separated string but merge column 10 and 11 of the array 
     // writer.WriteLine(string.Join(delimiter, columns)); 
    } 
    else 
    { 
     writer.WriteLine(string.Join(delimiter, columns)); 
    } 

残念ながら、私のLINQのライティングスキルがやや欠けている、誰かが私にTODOを埋める助けてくださいすることができます。

答えて

3

単に配列の代わりに列リストに使用します。それはあなたがマージした後、不要な列を削除することができます:完璧に動作

var columns = splitExpression.Split(line).Where(s => s != delimiter).ToList(); 

if (headers == null) headers = new string[columns.Count]; 

if (columns.Count != headers.Length) 
{ 
    columns[10] = columns[10] + columns[11]; // combine columns here 
    columns.RemoveAt(11);  
} 

writer.WriteLine(string.Join(delimiter, columns)); 
+1

はあなたにセルゲイをありがとう...私は少し恥ずかしい私が最初の場所でそれを見ていないよ正直に言うと – Freddie2025

関連する問題