ついでにSplFileObjectも触ってみた

SPLのドキュメントを読んでみたついでに、Splを冠すクラスをもう1つ触ってみた。
SPL-StandardPHPLibrary: SplFileObject Class Reference

<?php
 
$file = new SplFileObject("splfileobject.csv");
//$file->setCsvControl("\t", "");
 
while ($file->valid()) {
    echo var_dump($file->fgetcsv("\t", '"'));
    $file->next();
}
 
/** input(TSV; タブ文字+スペース文字で区切ってます)
a	 b	 c	 d	 e	 f	 g
1	 2	 3	 4	 5	 6	 7
 */
/** output
array(7) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  string(1) "d"
  [4]=>
  string(1) "e"
  [5]=>
  string(1) "f"
  [6]=>
  string(1) "g"
}
array(7) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
  [3]=>
  string(1) "4"
  [4]=>
  string(1) "5"
  [5]=>
  string(1) "6"
  [6]=>
  string(1) "7"
}
 */
 
?>

ファイル操作のための自作クラスを作った記憶があるんだけど、これ使った方が楽かな?

CSV処理関数を使った事が無かったんだけど、デリミタとエンクロージャを指定して、行を配列に展開出来るんだね。SplFileObject#fgetcsvの特徴なのか、組み込み関数のfgetcsvでも同じなのか分からないけど、エンクロージャに空文字('')は指定出来なくて、エンクロージャ無しの場合はデフォルト('"')で大丈夫らしい。あと、多分フィールドはtrimされてるね。

SplFileObject#setCsvControlが使えなかったんだけど、typoしてたかな?

プロフィール

このブログ記事について

このページは、koshigoeが2006年12月 3日 00:49に書いたブログ記事です。

ひとつ前のブログ記事は「PHPのSPLにはSplObjectStorageってのがあるんだね」です。

次のブログ記事は「Podcastingのアーカイブってどうなってるんだろう?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。