[PHP-users 10595] fgetcsv の仕様について

Susumu_Abe GDs.net php-users@php.gr.jp
Mon, 7 Oct 2002 11:12:28 +0900


いつもROMながら勉強させていただいております。
阿部と申します。

CSV処理について、下記のようなサンプルで、fgetcsv関数の
動作を試したところ、次のような現象がありました。
(Linux Redhat7.2, PHP4.1.2)

// テストデータ
  "[01*01]","[01*02]","[01*03]"
  '[02*01]','[02*02]','[02*03]'
  "[03*01]",'[03*02]',"[03*03]",

// テストソース
<?php
$row = 1;
$fp = fopen ("$filename","r");
while ($data = fgetcsv ($fp, 10000, ",")) {
    $num = count ($data);
    print "<p> $num fields in line $row: <br>";
    $row++;
    for ($c=0; $c < $num; $c++) {
        print $data[$c] . "<br>";
    }
}
fclose ($fp);
?>

// 出力結果
3 fields in line 1:
?"[01*01]"   <---
[01*02]
[01*03]
3 fields in line 2:
'[02*01]'
'[02*02]'
'[02*03]'
4 fields in line 3:
[03*01]
'[03*02]'
[03*03]


ダブルクォーテーションの取り扱いについて、 最初の1件目のみ
データとして扱われ、以後データ区切り文字列とはみなされているように
見受けます。
これは仕様ということなのでしょうか?やや不思議に思いましたので
ご報告させていただきます。

# 折角ですから引数で\t などなどセパレータを任意にもてるとうれしいような?

━[発信]━━━━━━━━━━━━━━━━━━━━━━━・・・・
 阿部 進 アベ ススム 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 □ Mail : haa08560@jnb.odn.ne.jp ; s01abe80@hotmail.com
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━