C#のCSV出力が短縮できたのでメモ
今までは(https://dobon.net/vb/dotnet/file/writecsvfile.html)
に記載されている書き方で作成していた。
//CSVファイルに書き込むときに使うEncoding
System.Text.Encoding enc =System.Text.Encoding.GetEncoding("Shift_JIS");
//書き込むファイルを開く
System.IO.StreamWriter sr = new System.IO.StreamWriter(csvPath, false, enc);
int colCount = dt.Columns.Count;
int lastColIndex = colCount - 1;
//レコードを書き込む
foreach (DataRow row in dt.Rows)
{
for (int i = 0; i < colCount; i++)
{
//フィールドの取得
string field = row[i].ToString();
//"で囲む
field = EncloseDoubleQuotesIfNeed(field);
//フィールドを書き込む
sr.Write(field);
//カンマを書き込む
if (lastColIndex > i)
{
sr.Write(',');
}
}
//改行する
sr.Write("\r\n");
}
//閉じる
sr.Close();
以下のように短縮することができた
//CSVファイルに書き込むときに使うEncoding
Encoding enc = Encoding.GetEncoding("Shift_JIS");
//書き込むファイルを開く
using (StreamWriter sr = new StreamWriter(strOutputPath, true, enc))
{
//レコードを書き込む
foreach (DataRow row in ds.dtOutput.Rows)
{
sr.WriteLine(string.Join(",", row.ItemArray));
}
}
・解説
//sr.Write → sr.WriteLineで、改行も含むように
sr.WriteLine(...
//1行単位のcsvを作成
string.Join(",", row.ItemArray)