13,002
回編集
(→使用例) |
|||
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); | |||
} | } | ||
} | } |