[PHP-users 34912] 固定長電文の解析
abs
kenken_abs @ leto.eonet.ne.jp
2010年 1月 4日 (月) 04:52:17 JST
はじめまして。
absと申します。
----環境----
Win XP SP2
IIS V5.1
PHP V5.2.3 (ISAPで動作)
SQLite V3.3.17
------------
他のデータベース(Oracle)から
データ連携するのに、
毎日固定長データのファイルが送られてきます。
これを、コマンドラインPHPで起動させ、
SQLiteのデータベースへデータを取り込みたいのですが、
ファイルからデータを取得するところでうまくいきません。
サンプルは、1レコード(1データ)130バイトの固定長で、
0〜10カラム
11〜20カラム
21〜40カラム
41〜70カラム
71〜100カラム
101〜130カラム
以上6個のデータが1レコードになっています。
そして空きはすべて半角空白で埋められています。
---ソース---
<?php
//読込テスト
$filenam = 'test.txt';
$fp = fopen($filenam,'rb');
flock($fp,LOCK_SH);
//1行目のstratデータ読み取り
$str = fgets($fp);
echo "長さ:".strlen($str).'</br>';
//2行目からのデータ取得
while(!feof($fp)){
$str = fgets($fp);
//わかりやすいように半角空白を0で埋める(実際はこの処理はしない)
$str=strtr($str,' ',0);
//文字コードをSJIS⇒UTF8に変換
$str=mb_convert_encoding($str,"utf-8","SJIS");
//参考に読み込んだ1行のデータ長を表示
echo "長さ:".strlen($str).'</br>';
//各カラムのデータ表示
$str_1 = mb_strcut($str,0,9);
$str_2 = mb_strcut($str,11,10);
$str_3 = mb_strcut($str,21,20);
$str_4 = mb_strcut($str,41,30);
$str_5 = mb_strcut($str,71,30);
$str_6 = mb_strcut($str,101,30);
echo "データ1:".$str_1.'</br>';
echo "データ2:".$str_2.'</br>';
echo "データ3:".$str_3.'</br>';
echo "データ4:".$str_4.'</br>';
echo "データ5:".$str_5.'</br>';
echo "データ6:".$str_6.'</br>';
}
echo '読込終わり';
$fp = NULL;
?>
---ソース終わり---
--------------実行結果----------------------
長さ:132
長さ:170 ⇒長さ:130
データ1:abcdef000 ⇒データ1:abcdef0000
データ2:234000000 ⇒データ2:1234000000
データ3:試験00000000000000 ⇒データ3:試験0000000000000000
データ4:0シケン00000000000000000000 ⇒データ4:シケン000000000000000000000000000
データ5:0000000試験入力です00000 ⇒データ5:試験入力です000000000000000000
データ6:0000000000000シケンニュ ⇒データ6:シケンニュウリョクデス000000000000000000
長さ:188
--省略--
長さ:198
--省略--
長さ:197
--省略--
長さ:210
--省略--
長さ:20
--enddata--
読込終わり
-----------実行結果終わり-------------------------------
----------test.txtの内容---------------------------------
startdata
abcdef 1234 試験 シケン 試験入力です シケンニュウリョクデス
abcdef 5678 次の試験 ツギノシケン 次の試験入力です ツギノシケンユウリョクデス
abcdef 9012 次々試験 ジジシケン 次の次の試験入力です ツギノツギノシケンユウリョクデス
abcdef 9012 その次試験 ソノツギシケン その次の試験入力です ソノツギノシケンユウリョクデス
abcdef 9012 その次々試験 ソノジジシケン その次の次の試験入力です ソノツギノツギノシケンユウリョクデス
enddata
----------test.txtの終わり---------------------------------
1行あたりの読み取られたデータの長さも一定ではなく、
こちらが思っているオフセットでデータ取得ができません。
⇒の後のデータのような出力結果を期待していたのですが・・・。
すみませんが、どなたかご教授ねがいます。
以上よろしくお願いします。
PHP-users メーリングリストの案内