#!/usr/local/bin/perl # 上記のPerlのパスはサーバーの仕様に従って変更して下さい。 #################################################################################################### # txt2mobileHTML ver 1.00 # CGI Script Written by junmix # Last Update 2007/03/03 # E-mail : hellojun@mail.goo.ne.jp # URL : http://www7a.biglobe.ne.jp/~junmix/index.html # ◆注意事項 # ・当サイトで配布するCGIスクリプトは全て無料ですが、著作権は放棄していません。 # ・商用目的でご使用の場合は、別途メールにて連絡をお願いします。 # ・CGIスクリプトの転載や再配布は、オリジナルのままでお願いします。 # ・CGIスクリプトは自由に改造してもらって結構です。 # ・著作権表示の変更は禁止致します。 # ・CGIスクリプトを利用して生じたいかなる損害に対しても、当方は一切責任を負いません。 # ・当CGIスクリプトは下記の環境で動作確認を行っています。 # [ Windows XP Home Edition SP2, ActivePerl ver 5.8.8 Build 817 ] # ◆概要 # ・テキストファイルを携帯でも閲覧可能にするためにHTMLにコンバートするものです。 # ・指定したファイルを読み取り、指定したサイズで分割してHTMLにします。 # ・作者の使用携帯であるSoftbank製のV603SH(http://mb.softbank.jp/mb/product/2G/model/v_603sh/)では、10KBサイズ指定して分割したHTMLは表示可能です。 # ・なお、分割したファイルの一覧をリンクにまとめたHTMLも同時に作成します。 # ◆改定履歴 # ・07/03/03 とりあえず作成(作成は随分前にしていたので、事実上とりあえず公開という意味で)。 #################################################################################################### ########################################################################### # # 基本的な使い方 # ########################################################################### # ・DOSプロンプトなどから実行するスクリプトです。 # 下記の設定部分にて分割するファイルや、分割する際のサイズ指定を行います。 # ・なお、HTMLタグの除去部分がありますが、通常では不要だと思われます。 # ですが、ある使い方においては非常に役に立つケースもあると思いますので、各自で判断してご利用下さい。 #################################################################################################### ########################################################################### # # 宣言部 # ########################################################################### use strict; #################################################################################################### # 以下、使用者が設定する項目です。 ########################################################################### # # ファイル設定 # ########################################################################### # 分割対象のテキストファイルを指定します my @files = (); # テキストファイルを分割して作成するHTMLのファイルサイズを指定します(バイト数) # (自分の使用する携帯のHTML表示可能サイズ数より少し減らしたくらいの値を推奨) # デフォルトの値は10240 my $file_size = 10240; # 以上までが、使用者が設定する項目です。 #################################################################################################### # 以下はプログラム本体です。Perl言語に詳しい方以外は変更しないで下さい。 ########################################################################### # # メインルーチンここから # ########################################################################### # タグのマッチング正規表現 my $tag_regex_ = q{[^"'<>]*(?:"[^"]*"[^"'<>]*|'[^']*'[^"'<>]*)*(?:>|(?=<)|$(?!\n))}; #'}}}} my $comment_tag_regex = '-]*(?:-[^>-]+)*?)??)*(?:>|$(?!\n)|--.*$)'; my $tag_regex = qq{$comment_tag_regex|<$tag_regex_}; # 配列の数だけ繰り返す foreach my $file (@files) { # ファイルが存在しない、またはファイルサイズが0バイトである場合 if (!-e $file || -s ($file) == 0) { # ループの先頭に戻る next; } # ファイルオープン(ファイルがないと失敗する) open (FILE, "<$file"); # ファイルロック flock (FILE, 1); # ファイルの中身を取得する my @data = ; # ファイルクローズ close (FILE); # 分割したファイルの末尾に付ける連番 my $count = 0; # 上記変数を3桁にして格納する変数 my $count_new; # HTML設定 my $data_line = "\n\n"; # HTMLのタイトルを設定 $data_line .= (split (/\./, $file))[0] . sprintf ("%03d", $count); # HTML設定 $data_line .= "\n\n\n\n"; # ファイルの一覧設定用 my @new_file_list = (); # 配列の数だけ繰り返す foreach (@data) { # 末尾の改行を除去 chomp ($_); # HTMLのタグに該当する部分を除去 $_ =~ s/$tag_regex//; # HTMLのサイズが設定したファイルサイズよりも小さい場合 if (length ($data_line) < $file_size) { # HTML出力 $data_line .= $_ . "
\n"; # ループの先頭に戻る next; } # 分割したファイルの連番を数値3桁に設定 $count_new = sprintf ("%03d", $count); # 作成するHTMLのファイル名を設定 my $new_file = (split (/\./, $file))[0] . $count_new . ".html"; # ファイルオープン(ファイルが無いと新規作成、あれば開いた時点で空にする) open (NEW, ">$new_file"); # HTML出力 print NEW $data_line . $_ . "
\n\n\n"; # ファイルクローズ close (NEW); # ファイル名を配列に追加する push (@new_file_list, $new_file); # 分割ファイル数のカウンタをインクリメント $count++; # HTML設定 $data_line = "\n\n"; # HTMLのタイトルを設定 $data_line .= (split (/\./, $file))[0] . sprintf ("%03d", $count); # HTML設定 $data_line .= "\n\n\n\n"; } # 一行読み込んだ中身が空でない場合 if ($data_line ne "") { # 分割したファイルの連番を数値3桁に設定 $count_new = sprintf ("%03d", $count); # 作成するHTMLのファイル名を設定 my $new_file = (split (/\./, $file))[0] . $count_new . ".html"; # ファイルオープン(ファイルが無いと新規作成、あれば開いた時点で空にする) open (NEW, ">$new_file"); # HTML出力 print NEW $data_line . "
\n\n\n"; # ファイルクローズ close (NEW); # ファイル名を配列に追加する push (@new_file_list, $new_file); } # 分割して作成したファイルのリンク一覧のHTML名を設定 my $indexfile = (split (/\./, $file))[0] . ".html"; # ファイルオープン(ファイルが無いと新規作成、あれば開いた時点で空にする) open (HTML, ">$indexfile"); # HTML設定 print HTML "\n\n"; # HTMLのタイトルを設定 print HTML (split (/\./, $file))[0]; # HTML設定 print HTML "\n\n\n\n"; # 配列の数だけ繰り返す foreach my $filelist (@new_file_list) { # 分割して作成したファイルのリンク一覧のHTML名を取得 my $linkfile = (split (/\./, $filelist))[0]; # HTML出力 print HTML "$linkfile
\n"; } # HTML出力 print HTML "\n"; # ファイルクローズ close (HTML); } # 処理を落とす exit;