かな文字の小文字→大文字変換

tr/ァィゥェォャュョッァィゥェォッャュョヮヵヶぁぃぅぇぉ/アイウエオヤユヨツアイウエオツヤユヨワカケあいうえお/を実行するのにどのようにすれば速いか。(VBAで)

ネットで
http://pxp.seesaa.net/article/7500794.html
を見つけた。文字列サーチして変換する王道だろう。

一方、思いついたのはBASP21を使う手抜き。

Function Z(S)
Dim BOBJ As Object
dim i as long
Set BOBJ = CreateObject("basp21")
I = BOBJ.TRANSLATE("tr/ァィゥェォャュョッァィゥェォッャュョヮヵヶぁぃぅぇぉ/アイウエオヤユヨツアイウエオツヤユヨワカケあいうえお/k", S, Z)
End Function

これで比較したところ面白いことが分かった。
変換する文字列が短いうちは文字列サーチのほうが速い。
しかし、文字列長が長くなっていくと、その差は縮まり、20文字程度で逆転してしまう。
ネイティブコンパイル、中間コードに落とせる環境ならば違った結果が出るのだろうが、VBAではループ、文字列サーチは結構荷が重い処理なのだろう。

しかし、逆転するとはいえ20文字程度の変換ならば百万回のループ処理で15~30秒程度だから、実質上ボトルネックになることはないと思われる。
[PR]
by nora1962 | 2009-02-25 07:48 | PC
<< postgresql8.3.6... fastcgi >>