CSVパーサ書いてみた
まぁ、なんとなくDB感覚でCSV使えたらいいなって(ぉ
PEAR::DB(古い)とかあるけど自作したほうが感覚的に好きなので。
開発機の設定が吹っ飛んだのでgithubに投げておきたいがまだできないので直接貼り付ける方法で勘弁。
<?php class csv_parser{ //class inside variables private $pdt ; private $fhd ; //class inside functions public function __construct($data,$params){ /* @params =>1 wide category =>2 height category =>3 wide and height category */ switch($params){ case 1: $this->pdt = $this->param1_parsing($data) ; break ; case 2: $this->pdt = $this->param2_parsing($data) ; break ; case 3: $this->pdt = $this->param3_parsing($data) ; break ; default: break ; } } public function return_data(){ return $this->pdt ; } /*Private funtions*/ private function csv_loader($data,$md){ if($md == 1){ return fopen($data,"r") ; }elseif($md == 2){ fclose($data) ; } } private function param1_parsing($data){//縦型CSV DB構造型 $fhd = $this->csv_loader($data,1) ; $keys = fgets($fhd,4096) ; $datas = array() ; $ars = $this->keys_inserts($keys) ; $i = 0 ; $j = 0 ; while(($data = fgets($fhd,4096)) !== false){//データ全行取る $splits = explode(",",$data) ; for($j=0;($keys = preg_replace("/(\r\n|\r|\n)/","",key($ars))) != false;$j++){//配列ポインタが終端に行くまで格納 $datas[$keys][$i] = preg_replace("/(\r\n|\r|\n)/","",$splits[$j]) ; next($ars) ; } reset($ars) ; $i++ ; } $this->csv_loader($fhd,2) ; return $datas ; } private function param2_parsing($data){ //ファイル開く $fhd = $this->csv_loader($data,1) ; $datas = array() ; $j = 0 ; while(($data = fgets($fhd,4096)) !== false){//データ全行取る $splits = explode(",",$data) ; //print_r($splits) ; for($i=1;$i<sizeof($splits);$i++){ $datas[$splits[0]][$i] = preg_replace("/(\r\n|\r|\n)/","",$splits[$i]) ; } $i++ ; } //ファイル閉める $this->csv_loader($fhd,2) ; return $datas ; } private function param3_parsing($data){ } private function keys_inserts($keys){ $keys = explode(",",$keys) ; foreach($keys as $key){ $dats[$key] = "" ; } //print_r($keys) ; return $dats ; } } ?>