前回作成した .NET 8.0 + Windowsフォームアプリ + CsvHelper + Dapper + SQLite で実装する CSVファイルインポート に、TSV形式のファイルもインポートできる機能を追加しました。
CSV形式はユーザー操作でよく使われ、TSV形式はシステム間連携でよく使われる。
TSVファイル処理も CsvHelper NuGetパッケージが主流。
ソースコードは GitHub で公開しています。
TSVファイル
テーブル定義に一致する、インポート用に作成したTSVファイル。
前回作成した .NET 8.0 + Windowsフォームアプリ + CsvHelper + Dapper + SQLite で実装する CSVファイルインポート をデータはそのまま、TSV形式に変更しただけ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Id Start End Name 1 2006-09-26 2007-09-26 安倍晋三 (第1期) 2 2007-09-26 2008-09-24 福田康夫 3 2008-09-24 2009-09-16 麻生太郎 4 2009-09-16 2010-06-08 鳩山由紀夫 5 2010-06-08 2011-09-02 菅直人 6 2011-09-02 2012-12-26 野田佳彦 7 2012-12-26 2020-09-16 安倍晋三 (第2期) 8 2020-09-16 2021-10-04 菅義偉 9 2021-10-04 2023-09-30 岸田文雄 10 2023-10-01 石破茂 |
ソースコード変更内容を解説
/CSV/政権.tsv
インポート用に作成したTSVファイル。
/WinFormsApp1/WinFormsApp1/Form1.cs
インポートするファイルを、CSVファイルから TSVファイルへ変更。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
private void btnCSVファイルをインポート_Click(object sender, EventArgs e) { try { var dataList = LoadCsv(@"..\..\..\..\..\CSV\政権.tsv"); Sql政権.InsertRange(dataList); Get政権(); MessageBox.Show("完了"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
インポートするファイル名の拡張子が、.csv ならカンマ区切り、.tsv ならタブ区切りとする処理を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public List<M政権> LoadCsv(string filePath) { // ファイル拡張子に応じた区切り文字を設定 var delimiter = Path.GetExtension(filePath).ToLower() switch { ".csv" => ",", ".tsv" => "\t", _ => throw new ArgumentException("サポートされていないファイル形式です。.csv と .tsv のみが許可されます。") }; using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, HeaderValidated = null, MissingFieldFound = null, Delimiter = delimiter })) { var records = csv.GetRecords<M政権>(); return new List<M政権>(records); } } } } |
/WinFormsApp1/WinFormsApp1/Form1.Designer.cs /WinFormsApp1/WinFormsApp1/Form1.resx
ボタン名を「CSV/TSVファイルをインポート」に変更したのみ。
コメント