2017-06-21 6 views
0

でマージします。xmlファイルを特定のdecendantのcsvファイルベースに変換しました。 これは私が得た結果です csv file exampleCSVで同じセルを持つ7行をC#

私は3つの製品があり、それぞれの製品は最大7つの線を取ります。多くのセルの値が同一であるため、製品ごとにすべての詳細をマージします。

私は私の結果は、私はC#でそれを行うことができますどのようにexpected result of csv file

に従うようになりたいですか?列の私の数はあなたが要求したとして、関連する行を結合するためにLINQを使用することができ、同じ

+0

の作者だよ何もありセルやCSVファイルとのマージなど。これらは単なるテキストファイルです。それらがどのように表示されるかは、それらを表示するアプリケーションによって異なります。 *何も*ファイルの各行に同じ数のフィールドを持つ必要があります。 –

+0

列とマージされたセルが必要な場合は、[EPPlus](https://www.nuget.org/packages/EPPlus/)のようなライブラリを持つExcelファイルを作成します。 'sheet.LoadFromCollection(orders)'や 'sheet.LoadFromDataTable(ordersTable)'を呼び出すのと同じくらい簡単です –

+0

これまでに何を試みましたか?あなたはどこに失敗したのかを教えてくれたようです。 – BugFinder

答えて

0

まま

注意。今

あなたは(わずか数の列を述べ、明確化のために)以下のように各CSV行を表すように定義されたオブジェクトを持っている、と言うことができます

public class Item 
{ 
    public string szItemId { get; set; } 
    public string szName { get; set; } 
    public string lRetailStoreID { get; set; } 
    public string szDesc { get; set; } 
} 

以下のようにLINQの投影クエリを使用してそれらをマージする硬質部
var recs = p.Where(r => !String.IsNullOrEmpty(r.szItemId)).GroupBy(r => r.szItemId) 
    .Select(g => new { 
    szItemId = g.Key, 
    szName = g.Where(i1 => !String.IsNullOrEmpty(i1.szName)).Select(i1 => i1.szName).FirstOrDefault(), 
    lRetailStoreID = g.Where(i1 => !String.IsNullOrEmpty(i1.lRetailStoreID)).Select(i1 => i1.lRetailStoreID).FirstOrDefault(), 
    szDesc = g.Where(i1 => !String.IsNullOrEmpty(i1.szDesc)).Select(i1 => i1.szDesc).FirstOrDefault() 
}); 

上記のクエリは、入力csvファイルからマージされた行を提供します。これで、それらを繰り返してCSVに書き込むことができます。

これが役に立ちます。 Cinchoo ETL

- オープンソースのフレームワークには、読み取りおよび書き込みCSVを開示

using (var p = new ChoCSVReader("mergeinput.csv").WithFirstLineHeader()) 
{ 
    var recs = p.Where(r => !String.IsNullOrEmpty(r.szItemId)).GroupBy(r => r.szItemId) 
     .Select(g => new { 
      szItemId = g.Key, 
      szName = g.Where(i1 => !String.IsNullOrEmpty(i1.szName)).Select(i1 => i1.szName).FirstOrDefault(), 
      lRetailStoreID = g.Where(i1 => !String.IsNullOrEmpty(i1.lRetailStoreID)).Select(i1 => i1.lRetailStoreID).FirstOrDefault(), 
      szDesc = g.Where(i1 => !String.IsNullOrEmpty(i1.szDesc)).Select(i1 => i1.szDesc).FirstOrDefault() 
     }); 

    using (var o = new ChoCSVWriter("mergeoutput.csv").WithFirstLineHeader()) 
    { 
     o.Write(recs); 
    } 
} 

次のように数行のコードで素早くファイルをすることはできません:私はこのライブラリ

関連する問題