まま
注意。今
あなたは(わずか数の列を述べ、明確化のために)以下のように各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);
}
}
次のように数行のコードで素早くファイルをすることはできません:私はこのライブラリ
の作者だよ何もありセルやCSVファイルとのマージなど。これらは単なるテキストファイルです。それらがどのように表示されるかは、それらを表示するアプリケーションによって異なります。 *何も*ファイルの各行に同じ数のフィールドを持つ必要があります。 –
列とマージされたセルが必要な場合は、[EPPlus](https://www.nuget.org/packages/EPPlus/)のようなライブラリを持つExcelファイルを作成します。 'sheet.LoadFromCollection(orders)'や 'sheet.LoadFromDataTable(ordersTable)'を呼び出すのと同じくらい簡単です –
これまでに何を試みましたか?あなたはどこに失敗したのかを教えてくれたようです。 – BugFinder