ですから、全ての目次テキストを表示します。
検索の文字があれば、シェルコマンドのgrepを使って検索します。
Grepですから、ヒットした情報は、「ファイル名、行番号」。
これを一時ファイルに保存して、表示させます
検索 実際のソースコードは
sub kensaku{ my ($kensaku_str) = @_; my $kensaku_path = $cirq_path . "*-1.txt"; my $kekka_path = $cirq_path . "kekka.txt"; my @mokuji_array; `grep -rni $kensaku_str $kensaku_path > $kekka_path`; open(MOKUJI, "<$kekka_path") || &msg("エラー報告","$kekka_path 読み込み オープンエラー"); my @mokuji_list = <MOKUJI>; close MOKUJI; foreach my $mokuji_rec(@mokuji_list){ #CirQ041-1.txt:11:6 地面アンテナの情 のように入っているので $mokuji_rec =~ /(.\/pdf\/)(Cirq\d+)(-1.txt:)/i; my $mokuji_str = $2 . "<>" . $'; push(@mokuji_array, $mokuji_str);#CirQ010<>マッチ文字を返す } return @mokuji_array; }
全ての目次 ソースコードは
sub kensaku_all{ my @mokuji_list; # 全てのテキストファイルを読み込んで表示する my @cirq_dir_list=glob($cirq_path . "*-1.txt"); @cirq_dir_list = sort { $a cmp $b } @cirq_dir_list; #&msg("デバッグ","@cirq_dir_list"); #globデーターからテキストファイルを次々に読み込む foreach my $fn(@cirq_dir_list){ open(MOKUJI, "<$fn") || &msg("エラー報告","$fn 読み込み オープンエラー"); my @text_array = <MOKUJI>; close MOKUJI; #CirQ番号 $fn =~ /(.\/PDF\/)(CirQ\d+)(-1.txt)/i; my $cirq_num = $2; #CirQ番号 my $cirq_str; #目次保存用 foreach my $rec(@text_array){ #スペース文字だけの行は削除 $rec =~ s/ //g; $rec =~ s/ //g; $rec =~ s/。//g; $rec =~ s/\f//g; my $temp=$rec; chomp($temp); if($temp eq "") {next;} #改行は。にする $rec =~ s/\n/。/; $cirq_str .= $rec; } #foreach my $rec(@text_array){ push(@mokuji_list, $cirq_num . "<>" . $cirq_str); } #foreach my $fn return @mokuji_list; } #sub end
新たにPDFを登録する場合の手順 備忘録
------------------------------------------------- #!/usr/bin/perl #/PDF/内のPDF全てから1ページ目をテキストにする #これはサーバー上では動かないので、マニュアル操作、コマンド操作でテキスト化する use strict; use Jcode; use CGI; use DBI; use File::Basename; my $cirq_path="./PDF/"; #月刊誌ホルダー中味をBLOGする my @cirq_dir_list=glob($cirq_path."*.pdf"); #-------------------------------------CIRQ cirq -->CirQに統一する #foreach my $fn2(@cirq_dir_list){ # my $re_fn=$fn2; # $re_fn =~ s/CIRQ/CirQ/; # `mv $fn2 $re_fn`; #} @cirq_dir_list = sort { $a cmp $b } @cirq_dir_list; #Blogして、PDF1ページ目をテキスト化する。 foreach my $fn(@cirq_dir_list){ `/usr/local/bin/pdftotext -f 1 -l 1 $fn | head`; #pdftotext 1Page only print ("$fn\n"); } my $ct= @cirq_dir_list; print("$ct\n"); #テキストの余分な改行(空白行)を削除する my @text_list=glob($cirq_path."*.txt"); foreach my $fn(@text_list){ my $fn3=$fn; $fn3 =~ s/.txt/-1.txt/; `gawk 'NF > 0' $fn > $fn3`; print ("$fn\n"); }