久しぶりにPHPでごく簡単なプログラムを組んでみた。
音声ファイルの長さが「○○:○○」(○○分○○秒の意)と表記してあるページが複数(600!)あり、そのページごとのファイル合計の長さを求め、30分以上あるかどうかを測定するというもの。
久しぶりだと以前多少は憶えていたものも、すっかり忘れてしまっていてググりながらの作業になった。
何となく該当ページのテキストをフォームのテキストエリアにペーストし、該当のテキスト「○○:○○」を抽出して、和算、その値が30分かどうかを判定し条件分岐で結果を出力…って感じかなとは思ったが結構手こずった。
使用した関数は以下。
str_replace …取得したテキストから特定の文字列を削除(置換)する。
preg_match_all …テキストから特定の文字列「○○:○○」(正規表現可)を抽出し、個別に配列に格納。
でここまでやってちょっと問題が。ググってみると「時刻の計算」「日付の計算」等はいっぱい出てくるのだがこういう単純な特定の長さの時間の計算法が出てこない…もしかすると独特な言い回しや専門用語があるのかもしれないが、「PHP 時間 演算」と検索しても出てくるのは目的のものではない。
うーん、参った。
それでもしつこく調べていたらやっと見つかった。
要は時間を秒に換算し、その上で数値として演算した後再び時刻表記に戻すということ。言われてみればそうか。
list($m,$s)=explode(":",$text); …抽出した$textを文字:で分割して$m,$sという変数に格納。
$ma=$m*60+$s; …秒に換算
$m=floor($ma/60); …60で割って小数点以下を切り捨て、分数に換算。
$s=fmod($ma,60); …60で割った余りを求めて秒数を取得。
sprintf('%d:%02d',$m,$s); …指定の書式で$m,$sを出力。
これでぐっと作業の時間圧縮ができた…つーかplaggerと組みあわせて作業したらもう終わってもうた。
- http://linuxpro.blog23.fc2.com/tb.php/106-aac142fd
0件のトラックバック
コメントの投稿