Macro/投稿/194

http://sakura.qp.land.to/?Macro%2F%C5%EA%B9%C6%2F194


Top > Macro > 投稿 > 194

数値増加/減少

  • ページ: Macro/投稿
  • 作者: miau?
  • カテゴリー: pls
  • 投稿日: 2009-03-28 (土) 15:57:24

メッセージ

カーソルの前行、前々行を元に数値を増加 or 減少させた行を挿入します。

  • 10 進数のみに対応(16 進数には非対応)
  • 正数⇔負数の変換があるケースは非対応

複数行のケースにも対応しています。

詳しい使い方は以下に書きました。

http://miau.s9.xrea.com/blog/index.php?itemid=1064


fileincrement.pls
  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


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル: fileincrement.pls 328件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2009-03-28 (土) 16:00:03 (5469d)