数値増加/減少
- ページ: Macro/投稿
- 作者: miau?
- カテゴリー: pls
- 投稿日: 2009-03-28 (土) 15:57:24
メッセージ
カーソルの前行、前々行を元に数値を増加 or 減少させた行を挿入します。
- 10 進数のみに対応(16 進数には非対応)
- 正数⇔負数の変換があるケースは非対応
複数行のケースにも対応しています。
詳しい使い方は以下に書きました。
http://miau.s9.xrea.com/blog/index.php?itemid=1064
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
75
76
77
78
79
80
81
82
| use strict;
use warnings;
use List::Util qw/max/;
if (IsTextSelected() == 0) {
# not selected -> select previous line
GoLineTop();
BeginSelect();
Jump(ExpandParameter('$y') - 1);
BeginSelect(); # end select
}
unless (GetSelectColmFrom() == 1 && GetSelectColmTo() == 1) {
MsgBox(sprintf(
"select correctly!\nSelectColmFrom(%d) and SelectColmTo(%d) must be 1",
GetSelectColmFrom(), GetSelectColmTo()
));
exit(0);
}
my $y = max(GetSelectLineFrom(), GetSelectLineTo());
my $lines = abs(GetSelectLineFrom() - GetSelectLineTo());
# save selection
my $prev_line = GetSelectedString(0);
# save previous selection
Jump(GetSelectLineFrom());
BeginSelect();
Jump(ExpandParameter('$y') - $lines);
BeginSelect(); # end select
my $prev2_line = GetSelectedString(0);
# return cursor
Jump($y);
# split with numbers
my @prev2 = split(/(\d+)/, $prev2_line);
my @prev = split(/(\d+)/, $prev_line);
# check if they are analyzable
if (@prev2 != @prev) {
MsgBox("can't analyze!");
exit(0);
}
# inclement each element
my $result = '';
for (my $i = 0; $i < @prev2; $i++) {
my $prev = $prev[$i];
my $prev2 = $prev2[$i];
if ($prev2 eq $prev) {
# identical strings => copy it
$result .= $prev2
}
elsif ($prev2 =~ /^\d+$/ && $prev =~ /^\d+$/) {
# number => inclement it
if (length($prev2) == length($prev) &&
($prev2 =~ /^0\d+$/ || $prev =~ /^0\d+$/))
{
# begins with 0 => format new string in the same way
$result .= sprintf('%0*d', length($prev2), $prev + ($prev - $prev2));
}
else {
# simple inclement
$result .= $prev + ($prev - $prev2);
}
}
else {
MsgBox("can't analyze!");
exit(0);
}
}
# insert new string
InsText($result);
# select new string
BeginSelect();
Jump(ExpandParameter('$y') - $lines);
BeginSelect(); # end select
|