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

ナビゲーションに移動 検索に移動
530行目: 530行目:
   
   
       Console.WriteLine($"Processed: Id: {person.Id}, Name: {person.Name}, Birth Date: {person.BirthDate:d}");
       Console.WriteLine($"Processed: Id: {person.Id}, Name: {person.Name}, Birth Date: {person.BirthDate:d}");
    }
}
</syntaxhighlight>
<br>
==== CSVファイルの書き込み : 同期処理 ====
以下の例では、CsvHelperライブラリを使用して、CSVファイルへ同期的に書き込んでいる。<br>
<br>
System.Text.Encoding.CodePagesを使用しているため、NET Core 3.0以降または.NET 5.0以降が必要となる。<br>
もし、古いバージョンの.NETを使用している場合は、System.Text.Encoding.CodePagesをNuGetからインストールする必要がある。<br>
<br>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using System.Text;
using System.Globalization;
using System.Collections.Generic;
using CsvHelper;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
public class Person
{
    [Name("ID")]
    public int Id { get; set; }
    [Name("NAME")]
    public string Name { get; set; }
    [Name("BIRTHDAY")]
    [Format("yyy-MM-dd")]
    public DateTime BirthDate { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
      string filePath = "sample.csv";
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
      Encoding shiftJis = Encoding.GetEncoding("shift_jis");
      var records = new List<Person>
      {
          new Person { Id = 1, Name = "John Doe", BirthDate = new DateTime(1980, 1, 1) },
          new Person { Id = 2, Name = "Jane Smith", BirthDate = new DateTime(1985, 5, 15) },
          new Person { Id = 3, Name = "Bob Johnson", BirthDate = new DateTime(1990, 12, 31) }
      };
        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
          Encoding        = shiftJis,  // Shift-JISエンコーディングを設定
          HasHeaderRecord = true      // CSVファイルにヘッダを書き込む
        };
        using (var writer = new StreamWriter(filePath, false, encoding))
        using (var csv = new CsvWriter(writer, config))
        {
          csv.Context.TypeConverterCache.AddConverter<DateTime>(new CustomDateTimeConverter());
          csv.WriteRecords(records);
        }
    }
}
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);
     }
     }
  }
  }

案内メニュー