p_div.plのCSV形式用です。辞書にレベルや発音記号データがある場合はこちらを お使いください。使い方は、CSV形式を扱う外はp_div.plと同じです。
#[p_divc.pl] # ================================================================ # PDIC辞書(CSV形式)の単語を指定行以下に分割する # for Perl (& JPerl) by T.SEKINE # # 使い方: perl p_divc.pl < old_file > new_file # ※使用前に、環境に応じて $WIDTH, $LINES の値を設定すること # # 処理内容: 単語を次のように分割し、各訳が $LINES 行以内に収まる # ようにする('_' は ' 'の意)。 # # have # have__. # have__.. # # ================================================================ # 主な変数 # @data 訳(改行毎)
# --- 環境に応じて次の値を設定してから実行すること --- $WIDTH = 72; # 訳部の1行文字数(byte) $LINES = 8; # 単語の最大行数(画面行数より少し小さくする)
while (<>) { $csvline .= $_ ; # 論理的1行読み込み if ($csvline =~ /"(.+)","(.+)","(.*)",(\d+),(\d),(\d),"(.*)"/s) { $tango = $1; # '"'なし $yaku = $2; # '"'なし $yourei = $3; # '"'なし $level = $4; $aflag = $5; $mflag = $6; $pron = $7; # '"'なし @data = split(/[\r\n]+/, $yaku); # 訳を@dataにセット &print_data; # 単語を分割して出力 $csvline = ''; # 次の論理行へ } }
sub print_data { $page = 0; $i = 0; while (@data[$i] ne '') { &print_tango($page++); # 単語 $gyo = int((length(@data[$i])-1) / $WIDTH) + 1; print '"'; # 訳 print @data[$i++]; while ((@data[$i] ne '') && ($gyo < $LINES)) { $gyo += int((length(@data[$i])-1) / $WIDTH) + 1; print "\r\n".@data[$i++]; } print '",'; print "e($yourei).','; # 用例など print $level.','.$aflag.','.$mflag.','."e($pron); $yourei = ''; # 用例出力は1回だけ print "\n"; } }
sub print_tango { my($page) = @_; print '"'; print $tango; if ($page > 0) { print "\x20\x20", '.' x $page; } print '",'; }
sub quote{ my($s) = @_; return '"'.$s.'"'; }
|