★コード解説(コード全体は「リストの単語を降順にソートする(2)」を
参照)
まず1行目のSetLengthでサブプローシージャSetLength(下記)を呼び出している。
Sub SetLength
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=44)
For %y = 1 to 20
%Str=""
For %x = 1 to 12
%S = GetCharacter()
If %S= " " Or %S = " " Then
Exit For
End If
右
%Str = %Str & %S
Next
$MyWord(%y)=%Str
$Length(%y) = Len(%Str)
ジャンプ(.ページ番号=1,.行番号=(5+%y),.文字位置=44)
Next
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=68)
For %i= 1 to 20
削除(.回数=2)
Insert($Length(%i))
!!ジャンプ(.ページ番号=1,.行番号=(5+%i),.文字位置=69)
DownCell()
Next
End Sub
これは前々回の「カーソル位置の文字を取得するには(2)」で
紹介したものと基本的に同じである。
やっていることは
(1)グローバル変数$MyWord()にリストの単語を格納する。
(2)各単語の長さを列「Length」に書き込む。
の2点である。この前処理のあとメインルーチンの2行目に戻る。
以下の部分がソートの心臓となる部分だ。
For %i = 1 to 20-1
For %j = %i + 1 To 20
If $Length(%i) < $Length(%j) Then
%Temp =$MyWord(%i)
$MyWord(%i) = $MyWord(%j)
$MyWord(%j) = %Temp
%TempNum =$Length(%i)
$Length(%i) = $Length(%j)
$Length(%j) = %TempNum
End If
Next
Next
やっていることは至極単純だ。1つめの単語の長さと2つめの単語の長さを
比べて、もしも1つめの単語のよりもと2つめの単語の方が長ければ
その位置を入れ替える、ということを繰り返してやっているに過ぎない。
冒頭ににも書いたがこの辺りは一太郎マクロに特有の考えではない。
従ってこの辺りのことを詳しく知りたければ参考資料はいくらでも簡単に
手に入る。よくわからなければ各自で研究して欲しい。
さて、ここまでできてしまえばソートした結果を所定の位置に
出力するだけである。まず、下記のコードでソートした単語を「WORD LIST」の
列に書き込み・・・、
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=44)
For %i = 1 To 20
削除(.回数=12)
Insert($MyWord(%i))
DownCell
Next
次のコードで「Length」の列に単語の長さを書き込んでプログラムは終了となる。
ジャンプ(.ページ番号=1,.行番号=5,.文字位置=69)
For %i= 1 to 20
削除(.回数=2)
Insert($Length(%i))
DownCell()
Next
上記のコードはサンプルファイルのなかに「Main」という名前の
マクロとして登録されている。
最近のコメント