皆様お疲れ様です。
段々と暖かくなってきはじめ汗をかく日が増えてきました。
家に着くころには中に来ているシャツがびしゃびしゃです。
桜が咲いたら花見に行きたいですね~
さて今回はタイトルのことではなく、C#でフォルダのcsvを読み込み別のcsvに書き出すというツールを作成したので
その時に使用したCsvというライブラリについて書こうと思います。
ツールを作ろうと思ったきっかけは、お客様に渡すドキュメントに記述する内容がいろいろなcsvに記述されており、
開いては閉じを繰り返すのが手間だと思ったので作成しようと思いました。
すぐ作れるものですし、使いまわせるので作ってよかったと思います。
private void button3_Click(object sender, EventArgs e)
{
foreach (string checkedCsvFilePath in this.checkedListBox1.CheckedItems)
{
// csv読み込み
csvReader(checkedCsvFilePath);
// csv書き出し
csvWriter();
}
MessageBox.Show("処理が完了しました。", "OK", MessageBoxButtons.OK);
}
this.checkedListBox1.CheckedItemsには読み込むcsvのファイルパスが格納されています
/// <summary>
/// csvを読み込み
/// </summary>
private void csvReader(string checkedCsvFilePath)
{
var fileName = checkedCsvFilePath;
string csv = File.ReadAllText(fileName, Encoding.GetEncoding("Shift_JIS"));
headers = new List<string>();
exportTargetCsv = new List<string>();
foreach (ICsvLine line in CsvReader.ReadFromText(csv))
{
if (headers.Count == 0)
{
exportTargetCsv.Add(fileName);
// 列数取得
int columCnt = line.ColumnCount;
for (int i = 0; i < columCnt; i++)
{
headers.Add(line.Headers[i]);
}
string header = string.Join(",", headers);
exportTargetCsv.Add(header);
}
exportTargetCsv.Add(line.Raw);
}
}
checkedCsvFilePathにはcsvのパスが入っています。
line.Headers[index]でヘッダが取得できます。
line.Rawで行が取得できます
/// <summary>
/// csv書き出し
/// </summary>
private void csvWriter()
{
string writingCsvPath = Path.Combine(textBox2.Text, ConfigurationManager.AppSettings["csvFileName"]);
if (!checkFileExists(writingCsvPath))
{
createCsvFile(writingCsvPath);
}
File.AppendAllLines(writingCsvPath, exportTargetCsv, Encoding.GetEncoding("shift-jis"));
}
textBox2.TextはC#Winformのテキストボックスで出力先のフォルダパスが入っています。
ConfigurationManager.AppSettings[“csvFileName”]は設定ファイルに記述した作成もしくは追記するcsvファイル名です。
Path.Combineでcsvファイルパスを作成しています。
子のパスにcsvファイルが存在しなければ、createCsvFileで空のcsvファイルが作成されます。
File.AppendAllLines()でcsvに記述して完了です。
おしまい