2010年1月 4日

[PHP-users 34912] 固定長電文の解析

はじめまして。
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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年1月 4日 04:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/91989
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。