0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
| | $[ = 1; $FS = "\t"; $blanks = sprintf('%100s', ' ');
$number = "^[+-]?([0-9,]+[.]?[0-9]*|[.][0-9]+)\$";
$str = $Editor->GetSelectedString(0); if(! $str){exit;}
foreach(split(/\r\n/,$str)){
chomp; $NR++;
@Fld = split($FS, $_, 9999);
$row{$NR} = $_; for ($i = 1; $i <= $#Fld; $i++) { if ($Fld[$i] =~ $number) { if($Fld[$i] =~ /\./) {
($int[$i], $fra[$i]) = split(/\./, $Fld[$i]);
$iwid{$i} = &max($iwid{$i}, length($int[$i])); $fwid{$i} = &max($fwid{$i}, length($fra[$i])); $nwid{$i} = &max($nwid{$i}, $iwid{$i}+$fwid{$i}+1);
} else {
$iwid{$i} = &max($iwid{$i}, length($Fld[$i]));
$nwid{$i} = &max($nwid{$i}, $iwid{$i});
}
$wid{$i} = &max($wid{$i}, $nwid{$i});
}
$wid{$i} = &max($wid{$i}, length($Fld[$i]));
}
}
for ($r = 1; $r <= $NR; $r++) {
$n = (@d = split($FS, $row{$r}, 9999));
for ($i = 1; $i <= $n; $i++) {
$sep = ($i < $n) ? ' ' : "\r\n"; if ($d[$i] =~ $number) {
$rtn .= sprintf('%' . $wid{$i} . 's%s', &numjust($i, $d[$i]), $sep);
}
else {
$rtn .= sprintf('%-' . $wid{$i} . 's%s', $d[$i], $sep);
}
}
}
$Editor->InsText($rtn);
sub max {
my($X, $Y) = @_;
(($X > $Y) ? $X : $Y); }
sub numjust {
my($n, $S) = @_;
if($fwid{$n}){ my($i, $f) = split(/\./, $S);
if($f){ $S .= substr($blanks, 1, $fwid{$n} - length($f));
} else { $S .= substr($blanks, 1, $fwid{$n} + 1);
}
}
$S . substr($blanks, 1, int(($wid{$n} - $nwid{$n}) / 2));
}
__END__
プログラミング言語awkのサンプルからa2p変換して
さらに数値項目の小数点位置あわせを追加しました
「キー割り当て一覧のコピー」や表計算ソフトから
の出力などのタブ区切りの値をエディタ上で見易い
テーブル整形を行うPerlScriptです。
整形する範囲を選択してからこのマクロを実行。
end of script
|