CSV("|" 区切り BSV)用 perl プログラム |
#!/usr/local/bin/perl -w
# Usage: check bsv-file名: すべてのレコードの field 数を最初の field 数と比較
use strict;
$#ARGV == 0 || die "Usage: check filename.b\n";
$_ = <>;
my @data = split(/\|/, $_,100);
my $nf = $#data;
print;
printf("number of fields=%d\n", $#data + 1);
my $nr = 1;
while(<>) {
$nr++;
@data = split(/\|/, $_, 100);
if($#data != $nf) {
printf("number of flds=%d\n", $#data + 1);
print;
}
}
print "number of data=$nr\n";
|
#!/usr/local/bin/perl -w
# Usage: b.sort fldnumber-of-sort-key file
use strict;
my $fld = shift || die "Usage: b.sort fldnumber-of-sort-key(1-) [filenames]\n";
$fld--;
print $_ = <>;
my @data = <>;
print sort byFld @data;
sub byFld {
(split(/\|/, $a))[$fld] cmp (split(/\|/, $b))[$fld];
}
|
#!/usr/local/bin/perl
my ($first);
print <<EOF;
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<head>
<body bgcolor="#203040" text="#f0f0f0" link="#a0f0f0" vlink="#f0a0f0" alink="#f000f0">
<center>
EOF
$_=<>;
chomp;
$ltime = localtime;
print "<h2>$_</h2>
<h4>Last update on $ltime</h4>
<h4>Since 1998</h4>
</center>
<hr size=5>
<dl>
";
$_ = <>; $first = 1;
while (<>) {
if ($first == 1) {print "<dt>$_"; $first = 0;}
else {print "<dd>$_";}
if ($_ eq "\n") {$first = 1; print "</dl>\n<dl>";}
}
print <<EOF;
</dl>
<hr>
<address>
Y. Okabe / The Univ. of the Air<br>
</address>
</body>
EOF
|
status(from 86)|Key|敬称 |
#!/usr/local/bin/perl -w
# Usage: b.join bsv-file名: bvs-file のデータへ ../addr.b のデータを統合する
use strict;
#$#ARGV == 0 || die "Usage: b.join filename.b\n";
$,="\|";
open(ADDR, '< ../addr.b');
while(<>) {
chomp;
my ($state, $key, @memo) = split(/\|/, $_);
while (<ADDR>) {
my ($key_, @data_) = split(/\|/, $_);
if ($key_ eq $key) {print $state, $key, @memo, @data_; last;}
}
}
|
#!/usr/local/bin/perl -w
# Xmas、年賀状用ラベルの platex file 作成プログラム: NYlabel join > label.tex
# join: b.join select > join で作ったファイル
# この後、platex temp.tex
#$#ARGV == 0 || die "Usage: NYlabel join > temp.tex\n";
@pos = ('5mm,27mm','75mm,27mm','145mm,27mm',
'5mm,69.3mm','75mm,69.3mm','145mm,69.3mm',
'5mm,111.6mm','75mm,111.6mm','145mm,111.6mm',
'5mm,153.9mm','75mm,153.9mm','145mm,153.9mm',
'5mm,196.2mm','75mm,196.2mm','145mm,196.2mm',
'5mm,238.5mm','75mm,238.5mm','145mm,238.5mm');
print '\documentclass[a4paper]{jarticle}
\usepackage{/usr/home/okabe/usr/tex/packages/at}
\begin{document}
\pagestyle{empty}
%
';
$_ = <>;
$i = 0;
print "{\\sf \n";
while (<>) {
chomp;
($state, $key, $title, $date, $name, $otitle, $cell, $h_addr, $h_tel,
$h_email, $o_addr, $o_tel, $o_email) = split(/\|/, $_);
if ($h_addr) {$addr = $h_addr;}
else {$addr = $o_addr;} # if no home_address
$addr =~ s/\%/\\\\\n/g; # % → CR
$addr =~ s/\&/\\&/g; # & → \&
$addr =~ s/\#/\\#/g; # # → \#
if ($title =~ /^[A-Za-z]/) { # English title
if ($name =~ /^[A-Za-z]/) { # if name is also English
$name = "$title $name";
} else {
$name = $title;
} else { # Kanji title
$name = "$name $title";
}
$name =~ s/\%/\\\\\n/g;
$name =~ s/\&/\\&/g;
$name =~ s/\#/\\#/g;
print '\\at(', $pos[$i], '){\parbox[t]{75mm}{';
if ($title =~ /^[A-Za-z]/) { # English label
print "{\\large $name}\\\\\n\ \\\\\n$addr}}\n";
} else { # Kanji label
print "{\\large $addr}\\\\\n\ \\\\\n{\\Large $name}}}\n";
}
$i++;
if ($i == 18) {$i = 0; print "\\newpage\n %\n";}
}
print "\\newpage\n";
print "}\n";
print "\\end{document}\n";
|