配列のデータを重複削除するコマンドが見つからなかったため、部品を作成してみました。
ソースコード
仕組みとしては単純で、重複削除対象の配列をループさせて、同じ値はスキップしつつ、別の配列に乗せ換えています。
TeraTermマクロでは配列の要素数を動的に変更出来ないようなので、重複削除対象の配列と同じ要素数の一時配列に乗せ換えつつ、重複削除後の配列の要素数を取得し、最後に適切な要素数の配列に乗せ換えています。
; 重複削除時の一時配列
strdim tmp_array num
tmp_num = 0
for i 0 num - 1
for j 0 num - 1
strmatch tmp_array[j] '.+'
if result = 0 then
tmp_array[j] = array_1[i]
tmp_num = tmp_num + 1
break
else
strcompare array_1[i] tmp_array[j]
if result = 0 then
break
endif
endif
next
next
; 重複削除後の配列
strdim array_2 tmp_num
for i 0 tmp_num - 1
array_2[i] = tmp_array[i]
next
使用方法
ここでは使用方法について説明します。
部品名は「array_deduplicate.ttl」としています。
呼び出し方
まず、重複削除元となる配列を準備します。
サンプルでは、配列名を「array_1」としています。
次に、「include ‘array_deduplicate.ttl’」で部品を呼び出すことで、
重複削除された配列「array_2」が作成されます。
; 引数1:配列(サイズは最大値を設定)
strdim array_1 65536
; グローバル変数
num = 0
; テスト用ファイル読み込み
fileopen file 'input.txt' 0 1
:startloop
filereadln file line
if result goto endloop
array_1[num] = line
num = num + 1
goto startloop
:endloop
fileclose file
include 'array_deduplicate.ttl'
; 重複削除の結果確認
fileopen file 'output.txt' 0
for i 0 tmp_num - 1
filewriteln file array_2[i]
next
end
実行結果
テストで47都道府県を適当に並び替えて、配列最大サイズの65536件分準備しました。
これを処理したところ、1分程度掛かりました。
500件であれば、1秒も掛かりませんでした。
記事は以上になります。泥臭い感じですが、重複削除が出来たのでよしとしました。
リンク
コメント