PHP, C# での Excel準拠 CSV ファイルのパース処理
前回 id:fits:20101129 の続きで、Excel の仕様に準拠した CSV ファイル(改行・カンマ・ダブルクォーテーションを要素内に含む)をパースするサンプルの PHP と C# 版です。
使用する CSV ファイルや出力結果の例は、前回 id:fits:20101129 を参照。
サンプルのソースは http://github.com/fits/try_samples/tree/master/blog/20101204/
PHP の場合
PHP では標準で用意されている fgetcsv を使います。
parse_csv.php
<?php if (($h = fopen($argv[1], "r")) !== FALSE) { while (($r = fgetcsv($h)) !== FALSE) { echo "$r[0] : $r[2]\n"; } fclose($h); }
str_getcsv というのもありますが、これは 1行分の文字列を処理するために使います。
以下の環境で実行してみました。
- PHP 5.3.3 Win32 VC9
実行例
> php parse_csv.php test.csv
C# の場合
C# というか .NET では、Microsoft.VisualBasic.FileIO.TextFieldParser を使えば、今回のような CSV ファイルを処理できます。
デフォルト設定だとファイルの文字コードが UTF-8 で処理されてしまうので、エンコードを指定しています。
parse_csv.cs
using System; using System.Text; using Microsoft.VisualBasic.FileIO; class CSVParse { public static void Main(string[] args) { using (var reader = new TextFieldParser(args[0], Encoding.Default)) { //区切り文字を設定する必要あり reader.SetDelimiters(","); while (!reader.EndOfData) { var r = reader.ReadFields(); Console.WriteLine("{0} : {1}", r[0], r[2]); } } } }
以下の環境でビルド実行してみました。
- Visual C# 2010(.NET Framework 4.0)
実行例
> csc /r:Microsoft.VisualBasic.dll parse_csv.cs > parse_csv.exe test.csv