--- lang: ja-jp breaks: true --- # UWP/WinUI 3 で CsvHelper を使用したCSVファイルの読み取り 2021-04-15 ```csharp= private IEnumerable<List<string>> GetCsvRecord( StorageFile csvFile ) { // .NET Core では、「Encoding.RegisterProvider」を呼び出す必要がある。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var enc = Encoding.GetEncoding("Shift_JIS"); using (var reader = new StreamReader(csvFile.Path, enc)) { var configuration = new CsvConfiguration( CultureInfo.CurrentCulture ); configuration.Encoding = enc; configuration.HasHeaderRecord = true; using (var csv = new CsvReader(reader, configuration)) { while (csv.Read()) { List<string> lst = new List<string>(); lst = csv.Parser.Record.ToList(); //for (int i = 0; i < csv.ColumnCount; i++) //{ // lst.Add(csv.GetField(i)); //} yield return lst; } } } } ``` ## 非同期バージョン ```csharp= private async IAsyncEnumerable<T> GetCsvRecordAsync<T, TMap>( StorageFile csvFile, Encoding? enc = null, bool? detectEncodingFromByteOrderMarks = null ) where TMap : ClassMap { // .NET Core では、「Encoding.RegisterProvider」を呼び出す必要がある。 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); if (enc == null) { enc = Encoding.UTF8; } if (detectEncodingFromByteOrderMarks == null) { detectEncodingFromByteOrderMarks = true; } using ( var reader = new StreamReader( csvFile.Path, enc, detectEncodingFromByteOrderMarks.Value ) ) { var configuration = new CsvConfiguration( CultureInfo.CurrentCulture ); configuration.Encoding = enc; configuration.HasHeaderRecord = true; configuration.IncludePrivateMembers = true; using (CsvReader csv = new CsvReader(reader, configuration)) { if (typeof(TMap) != typeof(ClassMap)) { csv.Context.RegisterClassMap<TMap>(); } await foreach (T record in csv.GetRecordsAsync<T>() .ConfigureAwait(false) ) { yield return record; } } } } ``` ###### tags: `UWP` `CsvHelper` `WinUI 3`