Macro/投稿/70
をテンプレートにして作成
Land.to
[
ホーム
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* タブ区切りのテーブル整形 [#yd10707a]
-ページ: [[Macro/投稿]]
-作者: [[りーや]]
-カテゴリー: pls
-投稿日: 2005-09-25 (日) 09:45:20
** メッセージ [#wa678b03]
#code(perl){{
# タブ区切りのテーブル整形
# table.pls
$[ = 1; # set array base to 1
$FS = "\t"; # set field separator
$blanks = sprintf('%100s', ' ');
$number = "^[+-]?([0-9,]+[.]?[0-9]*|[.][0-9]+)\$";
$str = $Editor->GetSelectedString(0); # 選択部分の...
if(! $str){exit;} # 選択範囲がなければ終了
# 各行を一行ずつ処理、一巡目で各項目の最大桁取得
foreach(split(/\r\n/,$str)){
chomp; # strip record separator
$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(/\./...
$iwid{$i} = &max($iwid{$i}, lengt...
$fwid{$i} = &max($fwid{$i}, lengt...
$nwid{$i} = &max($nwid{$i}, $iwid...
} else {
$iwid{$i} = &max($iwid{$i}, lengt...
$nwid{$i} = &max($nwid{$i}, $iwid...
}
$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...
}
else {
$rtn .= sprintf('%-' . $wid{$i} . 's%...
}
}
}
$Editor->InsText($rtn);
sub max {
my($X, $Y) = @_;
(($X > $Y) ? $X : $Y); #??? gt > chenge
}
sub numjust {
my($n, $S) = @_;
if($fwid{$n}){ # 小数以下部分あり
my($i, $f) = split(/\./, $S);
if($f){ # 小数以下の長さを最大合わせでスペー...
$S .= substr($blanks, 1, $fwid{$n} - ...
} else { # 小数点の分1桁も足す
$S .= substr($blanks, 1, $fwid{$n} + ...
}
}
# position s in field n
$S . substr($blanks, 1, int(($wid{$n} - $nwid{$n}) / ...
}
__END__
プログラミング言語awkのサンプルからa2p変換して
さらに数値項目の小数点位置あわせを追加しました
「キー割り当て一覧のコピー」や表計算ソフトから
の出力などのタブ区切りの値をエディタ上で見易い
テーブル整形を行うPerlScriptです。
整形する範囲を選択してからこのマクロを実行。
end of script
}}
----
#comment
終了行:
* タブ区切りのテーブル整形 [#yd10707a]
-ページ: [[Macro/投稿]]
-作者: [[りーや]]
-カテゴリー: pls
-投稿日: 2005-09-25 (日) 09:45:20
** メッセージ [#wa678b03]
#code(perl){{
# タブ区切りのテーブル整形
# table.pls
$[ = 1; # set array base to 1
$FS = "\t"; # set field separator
$blanks = sprintf('%100s', ' ');
$number = "^[+-]?([0-9,]+[.]?[0-9]*|[.][0-9]+)\$";
$str = $Editor->GetSelectedString(0); # 選択部分の...
if(! $str){exit;} # 選択範囲がなければ終了
# 各行を一行ずつ処理、一巡目で各項目の最大桁取得
foreach(split(/\r\n/,$str)){
chomp; # strip record separator
$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(/\./...
$iwid{$i} = &max($iwid{$i}, lengt...
$fwid{$i} = &max($fwid{$i}, lengt...
$nwid{$i} = &max($nwid{$i}, $iwid...
} else {
$iwid{$i} = &max($iwid{$i}, lengt...
$nwid{$i} = &max($nwid{$i}, $iwid...
}
$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...
}
else {
$rtn .= sprintf('%-' . $wid{$i} . 's%...
}
}
}
$Editor->InsText($rtn);
sub max {
my($X, $Y) = @_;
(($X > $Y) ? $X : $Y); #??? gt > chenge
}
sub numjust {
my($n, $S) = @_;
if($fwid{$n}){ # 小数以下部分あり
my($i, $f) = split(/\./, $S);
if($f){ # 小数以下の長さを最大合わせでスペー...
$S .= substr($blanks, 1, $fwid{$n} - ...
} else { # 小数点の分1桁も足す
$S .= substr($blanks, 1, $fwid{$n} + ...
}
}
# position s in field n
$S . substr($blanks, 1, int(($wid{$n} - $nwid{$n}) / ...
}
__END__
プログラミング言語awkのサンプルからa2p変換して
さらに数値項目の小数点位置あわせを追加しました
「キー割り当て一覧のコピー」や表計算ソフトから
の出力などのタブ区切りの値をエディタ上で見易い
テーブル整形を行うPerlScriptです。
整形する範囲を選択してからこのマクロを実行。
end of script
}}
----
#comment
ページ名: