プログラムなどなどのつづき
perl についてはこちらに移動(2016年2月21日)

perl tips

URIのリストから、それへのリンク付きのリストのhtmlファイルを作る 15 Jan 2009

こんな感じのリスト(下)をリンク付きのリストのhtmlファイルにする
in.txt

http://www.kit.ac.jp/
http://www.yahoo.co.jp/
http://www.google.co.jp/

makelink.pl

#!perl
print "<html>\n";
print "<body>\n";
print "<ul>\n";
while(<>){
    chop;
    print "<li><a href=\"$_\" target=\"_blank\">$_</a>\n";
}
print "</ul>\n";
print "</html>\n";
print "</body>\n";

使い方

perl makelink.pl <in.txt >out.txt 

メールに貼り付けて Thunderbird ででも受け取ればできちゃうのですけど、Pukiwikiに貼ってもできますけど……。

タブ区切りテキストからカラムを抜き出す 16th March 2009 & 29th April 2016

タブ区切りテキストの「2列目」と「5列目」を抜き出す

first2and5.pl

#!perl
while(<>){
    chop;
    my @after = split /[\t]/;
    print "@after[1]\t@after[4]\n";
}

@_ がなぜか上手く動かなかったので、配列名を明示することにした。

動かなかったもの↓(2009年3月16日版)

#!perl
while(<>){
    chop;
    split /[\t]/;
    print "@_[1]\t@_[4]\n";
}

使い方

perl first2and5.pl <in.txt >out.txt 

これで26めがのファイルから必要な部分が取り出せて、1めがになった。えくせる使うと簡単なようだけど、文字化けとか、ヘンなところにヘンな文字が入るとか、セーブするとヘンになっちゃうとか、エラーが起こるので、テキストのまま処理するほうが確実だったりする。

検索語を色付けしたhtmlファイルを出力する 23 May 2009

htmlファイルを検索して、検索語を蛍光マーカーで色付けしたようなhtmlファイルを作る
このpukiwikiで検索すると複数の検索語が色付けして表示されるのと同じようなファイルを作るものです
原理は<span>タグを利用して色付けするだけ
本体部分のコードは下のようなもの

while( s/$keyword/1101TARGET_HERE1101/){}
while( s/1101TARGET_HERE1101/<span style=\"background-color:$colour\"> $keyword <\/span>/){}

出力例その1 → fileさんぷる-coloured.html  出力例その2 → filesample-coloured.html
batch fileを利用して、ドラッグ&ドロップで使えるものを作ったのでご利用の方はダウンロードしてどうぞ。著作権は GNU GPL 3。こちら→ filecolour.zip

おととい、某友人に、こんなのあるといいねえ、と言われて作ってみました。
その夜、firefoxのアドオンで同様の表示が実現できるとメールで教わりました(保存はできません)

SearchWP
SearchBox Companion
です。
これを組み合わせると、
ページ内検索で、複数検索語を色分けしてくれます。

複数のファイルの中の文字列を置換する 03 July 2009 & 16 November 2013

http://d.hatena.ne.jp/odz/20061218/1166499908 に従う

perl -pi -e 's|src="/|src"../|' * ← なぜか、上手くいかなくなった(2013年11月16日)

バックアップファイルを作れと perl が言うのと、対象となるファイルの中に 変換すべき文字列が複数あるときに対応するために、g オプションを付けたら 上手くいった
ということで

perl -pibak -e 's| |\t|g' *

これは、スペースひとつをタブへ変換、する
(2013年11月16日)

perl プログラムの頭に 21 March 2016

#!/usr/bin/perl

もちろん、perl が別なところにあるなら、それにする

hash 21 March 2016

my %countrycode = (
     "Afghanistan" => "Afghanistan",
     "Albania" => "Albania",
     "Algeria" => "Algeria",
     "Andorra" => "Andorra",
     ……
     "VirginIslandsBritish" => "Virgin Islands, British",
     "VirginIslandsUS" => "Virgin Islands, U.S.",
     "WallisandFutuna" => "Wallis and Futuna",
     "Yemen" => "Yemen",
     "Zambia" => "Zambia",
     "Zimbabwe" => "Zimbabwe"
);
$nowcountry = $countrycode{VirginIslandsBritish};

で、参照できる。

local time 21 March 2016

perlでYYYYMMDD形式の日付を得る を参考に(前半はそのまま)

$yyyymmdd は 20160321 のように
$mydaymonthyear は 21 March 2016 のように
$mon は 1月が「0」からなので注意。

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);  
my $yyyymmdd = sprintf("%04d%02d%02d", $year + 1900, $mon + 1, $mday);  
my @monthname = ( January, February, March, April, May, June, July,
		  August, September, October, November, December);
my $mydaymonthyear = $mday . " " . $monthname[$mon] . " " .  ($year + 1900);  

乱数 21 March 2016

99999 までの自然数

 my $randomnum = int(rand(99999));

分割して配列に収める 21 March 2016

my $inputnums = "何らかの文字列としてのデータ";
$inputnums =~ s/,/ /g;
$inputnums =~ s/\./ /g;
$inputnums =~ s/;/ /g;
$inputnums =~ s/:/ /g;
$inputnums =~ s/\t/ /g;
$inputnums =~ s/\n/ /g;
$inputnums =~ s/\r/ /g;
my @mynums = split(/ +/, $inputnums);
@mynums = sort {$a <=> $b} @mynums; # sort small to large
my $nummynum = @myunums;

if 分岐 21 March 2016

elsif であって、else if ではない
else はなくてもよい

if(条件1){
……
}elsif(条件2){
……
}else{
……
}

ファイルへの書き出し 21 March 2016

open(DATAFILE, ">> $myoutfile") or die("error :$!");
(print で書く1)
print DATAFILE $mydaymonthyear;
(print で書く2:here document)
print DATAFILE << 'LATEXHAED';
内容
LATEXHAED
close(DATAFILE);

here document 21 March 2016

そのまま、または、ほぼそのまま print する

出力先
ここでは、DATAFILE に出力しているが、省くと STDOUT

end mark (ここでは「LATEXHAED」)

print DATAFILE << 'LATEXHAED'; ← シングルクォーテーションの例
内容
LATEXHAED ← セミコロンなし

wget でデータを取得する 21 March 2016

Linux&Perl→Perlメモ→ネットワークを使う→FTPダウンロード→wgetを使う
ほぼそのままですが……、pipe も使えるのです。ということで。

open (myhtml, "wget   -q -O - 'http://hoge.hoge.jp/hoge.cgi?hoge=ho&hohe='$_ | grep -A 1 'ohoho' | tail -n 1 | " );
my @data = <myhtml>;
close (myhtml);

pdf file を LaTeX で作成する 21 March 2016

chdir("$myfullpdfdir");
system("latex $myfilename >> latexlog.log");
system("dvipdfmx $myfilename >> dvipdfmxlog.log");

数字に桁区切りのコンマを追加するサブルーチン 21 & 22 March 2016

あまり大きな数字を扱わないので、999,999 まで。

sub commagen {
   my $nocomma = $_[0];
   my $myup = int($nocomma/1000);
   my $mydw = $nocomma - ($myup*1000);
   my $withcomma = ","; # initialize
   if($myup>0){
	$withcomma = $myup . "," . sprintf("%03d", $mydw);
   } else {
	$withcomma = $mydw;
   }
   return $withcomma;
}

LaTeXで、いや〜なことをする特殊記号を LaTeX の入力に変換 21 March 2016

$username = latexsafe($username);
 
sub latexsafe{
   my $unsafestring = $_[0];
   $unsafestring =~ s/\\/ \\textbackslash  /g;
   $unsafestring =~ s/#/ \\# /g;
   $unsafestring =~ s/\$/ \\\$ /g;
   $unsafestring =~ s/%/ \\% /g;
   $unsafestring =~ s/&/ \\& /g;
   $unsafestring =~ s/_/ \\_ /g;
   $unsafestring =~ s/{/ \\{ /g;
   $unsafestring =~ s/}/ \\} /g;
   $unsafestring =~ s/\|/ \\textbar  /g;
   $unsafestring =~ s/</ \\textless /g;
   $unsafestring =~ s/>/ \\textgreater /g;
   $unsafestring =~ s/>/ \\textgreater /g;
   $unsafestring =~ s/~/ \\~{} /g;
#    $unsafestring =~ s/~/ \\textasciitilde /g;
   $unsafestring =~ s/\^/ \\^{} /g;
#    $unsafestring =~ s/\^/ \\textasciicircum /g;
   return $unsafestring;
}
Today:2Yesterday:0Total:27082 since 23 May 2009

添付ファイル: fileさんぷる-coloured.html 4282件 [詳細] filesample-coloured.html 74件 [詳細] filecolour.zip 1031件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 29 Apr 2016 (金) 14:38:29 (2909d)