C#でCSVファイルやTSVファイルを読み込む方法の紹介です。
概要
C#でCSVファイルやTSVファイルを読み込み、カンマやタブなどの区切り文字で分割してそれぞれの項目の値を取得するコードを紹介します。実装する方法には何通りかありますので、それぞれの方法を紹介します。
string.Split を利用する方法
string.Split()メソッドを利用すると、Splitメソッドに与えた文字、文字列を区切り文字として入力文字列を分割できます。コードや実装の詳細は
こちらの記事を参照してください。
メリット
- シンプルに実装できる
- 標準のメソッドである。アセンブリの追加参照が不要
デメリット
- 項目が「"」ダブルクォーテーションで囲まれているデータの場合、ロジックを自前で実装する必要がある
下記のCSVの行が存在した場合、単純にSplitメソッドで","で分割すると、下記の結果となります。
Penguin, 120, C001, "1,200,000", OK
インデックス | 値 |
0 | Penguin |
1 | 120 |
2 | C001 |
3 | "1 |
4 | 200 |
5 | 000" |
6 | OK |
「"」で囲まれ内部に「,」のある項目が予期しない分割になってしまいます。「"」で囲まれた「,」に対応する場合、コードがある程度複雑になります。
TextFieldParser を利用する方法
TextFieldParserクラスを利用すると、簡単な実装でCSVファイルを読み込み項目の値の取り出しが容易にできます。TextFieldParserクラスを利用した実装の詳細、コードは
こちらの記事を参照してください。
なお、TextFieldParserクラスはMicrosoft.VisualBasic名前空間に存在するため、Microsoft.VisualBasic アセンブリの参照が必要になります。
メリット
- 「"」で囲まれ、内部に「,」がある項目も意図したとおりに分割できる
- 実装がシンプル
デメリット
- Microsoft.VisualBasic アセンブリの参照が必要
- VisualBasic のライブラリを使うことへの抵抗感
Regex(正規表現)を利用する方法
正規表現で区切り文字を検出し、Regex.Split()メソッドで文字列を分割することで、CSVの項目を取得できます。実装コードや動作の詳細は
こちらの記事を参照してください。
メリット
- 「"」で囲まれ、内部に「,」がある項目も意図したとおりに分割できる
- 実装が比較的シンプル
- アセンブリの参照が不要
デメリット
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2017-11-28