「C Sharpの基礎 - CSVファイル」の版間の差分

ナビゲーションに移動 検索に移動
534行目: 534行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== CSVファイルの書き込み : 同期処理 ====
==== CSVファイルの書き込み ====
以下の例では、CsvHelperライブラリを使用して、CSVファイルへ同期的に書き込んでいる。<br>
===== 同期処理 =====
以下の例では、CsvHelperライブラリを使用して、CSVファイルへ同期的に作成している。<br>
<br>
<br>
System.Text.Encoding.CodePagesを使用しているため、NET Core 3.0以降または.NET 5.0以降が必要となる。<br>
System.Text.Encoding.CodePagesを使用しているため、NET Core 3.0以降または.NET 5.0以降が必要となる。<br>
595行目: 596行目:
   
   
  // DateTimeConverterを拡張して、日付を"yyyy年MM月dd日"形式で出力するカスタムコンバータを定義
  // DateTimeConverterを拡張して、日付を"yyyy年MM月dd日"形式で出力するカスタムコンバータを定義
public class CustomDateTimeConverter : CsvHelper.TypeConversion.DateTimeConverter
{
    public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
    {
      if (value is DateTime dateTime)
      {
          return dateTime.ToString("yyyy年MM月dd日");
      }
      return base.ConvertToString(value, row, memberMapData);
    }
}
</syntaxhighlight>
<br>
// 生成されるCSVファイル
社員番号,氏名,生年月日
1,山田 太郎,1980年01月01日
2,佐藤 花子,1985年05月15日
3,鈴木 一郎,1990年12月31日
<br>
===== 非同期処理 =====
以下の例では、CsvHelperライブラリを使用して、CSVファイルを非同期的に作成している。<br>
<br>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using System.Text;
using System.Globalization;
using System.Collections.Generic;
using System.Threading.Tasks;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
public class Person
{
    [Name("社員番号")]
    public int Id { get; set; }
    [Name("氏名")]
    public string Name { get; set; }
    [Name("生年月日")]
    [Format("yyyy年MM月dd日")]
    public DateTime BirthDate { get; set; }
}
class Program
{
    static async Task Main(string[] args)
    {
      string filePath  = "sample.csv";
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
      Encoding shiftJis = Encoding.GetEncoding("shift_jis");  // 文字コードをShift-JISに指定する場合
      var records = new List<Person>
      {
          new Person { Id = 1, Name = "山田 太郎", BirthDate = new DateTime(1980, 1, 1) },
          new Person { Id = 2, Name = "佐藤 花子", BirthDate = new DateTime(1985, 5, 15) },
          new Person { Id = 3, Name = "鈴木 一郎", BirthDate = new DateTime(1990, 12, 31) }
      };
      var config = new CsvConfiguration(CultureInfo.InvariantCulture)
      {
          Encoding = shiftJis,    // Shift-JISエンコーディングを設定
          HasHeaderRecord = true  // CSVファイルにヘッダを書き込む
      };
      await using (var writer = new StreamWriter(filePath, false, shiftJis))
      await using (var csv = new CsvWriter(writer, config))
      {
          // DateTimeコンバータを追加して、日付を日本語形式で出力
          csv.Context.TypeConverterCache.AddConverter<DateTime>(new CustomDateTimeConverter());
          await csv.WriteRecordsAsync(records);
      }
    }
}
// 日付を"yyyy年MM月dd日"形式で出力するカスタムコンバータを定義
  public class CustomDateTimeConverter : CsvHelper.TypeConversion.DateTimeConverter
  public class CustomDateTimeConverter : CsvHelper.TypeConversion.DateTimeConverter
  {
  {

案内メニュー