2010年1月13日

[PHP-users 34927] Re:固定長電文の解析

花原@明宏です。


解決されたようですが、固定長の文字列を切り出すのなら、unpack()も使えると
思います。
unpack()のフォーマット文字列の

A10col1/A10col2/...


の'A10'の部分が10文字幅の空白で埋めた文字列(unpackされるときに空白は取り
除かれる)、'col1'が連想配列に入れるときのキー、'/'が区切り、らしいです。


# PHPのunpack()のドキュメントを読んでも、最初はよく分からなかった...(^_^;)。


<?php

$fp = fopen('test.txt','rb');
flock($fp, LOCK_SH);

while (! feof($fp)) {
$buf = fgets($fp);
if (rtrim($buf) == "enddata") {
break; // 先頭が 'enddata'なら終了
}

// $buf の文字列を $ary['col1']〜$ary['col6'] に分解。
$ary = unpack("A10col1/A10col2/A20col3/A30col4/A30col5/A30col6", $buf); // 文字列末尾の空白を取り除く場合
//$ary = unpack("a10col1/a10col2/a20col3/a30col4/a30col5/a30col6", $buf); // 文字列末尾の空白を取り除かない場合

// 連想配列要素の文字コードを変換
// 全部のカラムを文字コード変換かけてますが、不都合があるなら個別に変換
foreach ($ary as $key => $value) {
$ary[$key] = mb_convert_encoding($value,"utf-8","SJIS");
}
var_dump($ary); // とりあえず確認、後にコメントアウト

// 分解した各カラムを処理するコードを記述
//....
}

fclose($fp);
?>


---
Yoshihiro Hanahara <hanahara @ meiko . co . jp>

_______________________________________________
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月13日 14:04
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/92292
トラックバック
コメント
コメントする




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