2025年7月30日
CSVファイルをC#で読み込むとき、「カンマ」「改行」「ダブルクオート」などに苦しんだ経験はありませんか?
この記事では、特に.NET 8 環境で改行やカンマを含む複雑なCSVを正しく読み込む2つの方法を紹介します。
TextFieldParser を使った.NET標準の方法CsvHelper を使った方法どちらもLINQと組み合わせて使えるので、後処理や検索もスマートに行えます。
例えば、次のようなCSVファイルを処理する場合:
NUM,SECTION,NAME,VALUE
1,"営業",山田,"売上1000"
2,"営業,
開発",田中,"売上500, 開発300"
3,"デザイン,開発",鈴木,"デザイン200, 開発400"
この中には…
"デザイン,開発":カンマを含む値"営業,\n開発":改行を含む値があり、単純な string.Split(',') では正しく処理できません。
TextFieldParser を使う(.NET 標準)TextFieldParser は、Microsoft.VisualBasic 名前空間に含まれるクラスで、カンマ区切り + ダブルクオート対応 + 改行対応 が可能。
using Microsoft.VisualBasic.FileIO; // NuGet: Microsoft.VisualBasic
class CsvRecord
{
public int NUM { get; set; }
public string SECTION { get; set; }
public string NAME { get; set; }
public string VALUE { get; set; }
}
var records = new List<CsvRecord>();
using var parser = new TextFieldParser("sample.csv");
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
parser.HasFieldsEnclosedInQuotes = true;
// ヘッダーをスキップ
parser.ReadLine();
while (!parser.EndOfData)
{
var fields = parser.ReadFields();
if (fields.Length >= 5)
{
records.Add(new CsvRecord
{
NUM = int.Parse(fields[0]),
SECTION = fields[1],
NAME = fields[2],
VALUE = fields[3]
});
}
}
| 項目 | 内容 |
|---|---|
| 改行対応 | ✅ 完全対応 |
| 外部ライブラリ | ❌ 不要(標準) |
| LINQ対応 | ✅ 利用可能 |
| 弱点 | 名前空間がVB依存、ややレガシーな印象 |
CsvHelper ライブラリを使う(推奨)CsvHelper は、.NETで最も人気のあるCSV読み書きライブラリで、改行・カンマ・クォートなどすべてに対応済み。
dotnet add package CsvHelper
using CsvHelper;
using System.Globalization;
class CsvRecord
{
public int NUM { get; set; }
public string SECTION { get; set; }
public string NAME { get; set; }
public string VALUE { get; set; }
}
using var reader = new StreamReader("sample.csv");
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
var records = csv.GetRecords<CsvRecord>().ToList();
foreach (var rec in records)
{
Console.WriteLine($"{rec.NUM}: {rec.NAME} => {rec.VALUE}");
}
プロパティ名とCSVヘッダー名が一致していないと、以下のようなエラーが出ます:
No members are mapped for type 'CsvRecord'
[Name("ヘッダー名")] 属性を付ける| 特徴 | TextFieldParser | CsvHelper |
|---|---|---|
| 改行・カンマ対応 | ✅ | ✅ |
| 導入の手軽さ | ◎(標準) | ○(NuGet) |
| 拡張性・機能 | △ | ◎ |
| 学習コスト | 低 | 中 |
TextFieldParserC#でCSVを読み込む際に、改行やカンマを含むフィールドを安全に処理するには、TextFieldParser か CsvHelper を使うのがベストなのかもしれません
.NET 8 や LINQ と組み合わせれば、スマートで強力なCSV処理が可能になります。
WinUI 3 / XAML の Grid.Width 設定方法
WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】
MenuFlyout は WinUI 3 で便利なポップアップメニュー
WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い
PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術
Microsoft Storeアプリ更新時のロールアウト設定まとめ
PowerShellでtail -f!WindowsでUTF-8対応のリアルタイムログ監視を実現する方法
Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法
Microsoft Authenticatorのオートフィル機能が2025年7月に終了
RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて
PowerShellでGrapheme Clusterについて処理を考える
業務用ノートパソコンのストレージは暗号化されている?BitLockerの確認と対策方法
【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法
【C# .NET 8 対応】List<string> を重複なしでマージする方法|
【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き
【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet
WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法
System.Text.Json 9.0.0.0 で FileNotFoundException
C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】
C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法