[PHP-users 20666]CSVファイルのデータ

Yoshiyuki Nonaka nonaka @ bananas-dive.com
2004年 3月 6日 (土) 17:18:31 JST


はじめまして
野中と申します。

ダウンロードした郵便番号データ(CSV形式/SHIFT JIS)をテーブルに挿入しようとしてい
るのですが、どうしてもデータがおかしくなってしまうので、悩んでいます。
皆さんのアドバイスを頂けたらとメールしました。
よろしくお願いいたします。

【環境】
OS         :RedHat9(2.4.20-30.9smp)
PHP        :4.3.4
Apache     :2.0.48
PostgreSQL :7.4.1

例えば、下記のデータを
----------------------------------
 [0]    [1]       [2]         [3]                 [4]
01393,"04801","0480135","ホッカイドウ","スッツグンクロマツナイチョウ",
    [5]          [6]        [7]          [8]  [9〜14]
"カクジュウ","北海道","寿都郡黒松内町","角十",0,0,0,0,0,0
----------------------------------
	↓
----------------------------------
   [0]     [1]        [2]       [3]
048-0135 北海道 寿都郡黒松内町 角十
----------------------------------

とゆうふうにしたいのですが、54件分だけデータが
[2][6][7][8][9〜14][0]の並び方になってデータが挿入されてしまいます。
  ↓
----------------------------------
 048-0135 | 北海道     | 寿都郡黒松内町 | 角十",0,0,0,0,0,001393,
----------------------------------

何故、このようになるのか原因を知りたいのですが、原因の調べ方等を
お教えいただけないでしょうか。
宜しくお願いいたします。

======================================================
while ($a = fgetcsv ($fp, 10000,",")) {
 for ($k=0; $k<count($a); ++$k){
  if(($k > 1)&&($k!==3)&&($k!==4)&&($k!==5)&&($k < 9)){
   if($k===2){
     $sql="INSERT INTO zipaddrs VALUES('";
     $sql.=mb_convert_encoding(sprintf("%03d-%04d", substr($a[$k],0,3),
           substr($a[$k],3)),"EUC-JP","SJIS-win")."',";
   }elseif($k===7){
     $sql.="'".mb_strimwidth(mb_convert_encoding($a[$k],"EUC-JP","SJIS-
               win"),0,20)."',";
   }elseif($k===8){
     $sql.="'".mb_convert_encoding($a[$k],"EUC-JP","SJIS-win")."')";
     ++$count;
     $result=$con->sqlexec($sql);
   }else{
     $sql.="'".mb_convert_encoding($a[$k],"EUC-JP","SJIS-win")."',";
   }
  }
 }
}


PHP-users メーリングリストの案内