CSVファイルやTSVファイルを読み込む - C#

C#でCSVファイルやTSVファイルを読み込む方法の紹介です。

概要

C#でCSVファイルやTSVファイルを読み込み、カンマやタブなどの区切り文字で分割してそれぞれの項目の値を取得するコードを紹介します。実装する方法には何通りかありますので、それぞれの方法を紹介します。

string.Split を利用する方法

string.Split()メソッドを利用すると、Splitメソッドに与えた文字、文字列を区切り文字として入力文字列を分割できます。コードや実装の詳細は こちらの記事を参照してください。

メリット

  • シンプルに実装できる
  • 標準のメソッドである。アセンブリの追加参照が不要

デメリット

  • 項目が「"」ダブルクォーテーションで囲まれているデータの場合、ロジックを自前で実装する必要がある
下記のCSVの行が存在した場合、単純にSplitメソッドで","で分割すると、下記の結果となります。
Penguin, 120, C001, "1,200,000", OK
インデックス
0Penguin
1120
2C001
3"1
4200
5000"
6OK

「"」で囲まれ内部に「,」のある項目が予期しない分割になってしまいます。「"」で囲まれた「,」に対応する場合、コードがある程度複雑になります。

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
iPentec all rights reserverd.