全角カタカナを半角カタカナに変換する方法


コークハイ  2008-09-06 22:52:53  No: 31872  IP: 192.*.*.*

全角カタカナを半角カタカナに変換する方法を教えてください。
今まで全角や半角のことは考えたことがなかったのですが、カタカナの場合、
ア→アで半角1文字、ダ→ダで半角2文字と、濁音がつくと濁音分で半角1文字なんですね。それから変換するのはカタカナのみで空欄の場合は変換しないでほしいのですが。

編集 削除
igy  2008-09-07 11:32:05  No: 31873  IP: 192.*.*.*

StringReplace 関数を使うのは、どうですか?

var
    Zen: array[0..2] of PChar = (
        'ア', 'イ', 'ダ'       // 必要に応じて追加すること
        );
    Han: array[0..2] of PChar = (
        'ア', 'イ', 'ダ'         // 必要に応じて追加すること
        );

function Test(S: String): String;
var
    i: integer;
begin
    for i := Low(Zen) to High(Zen) do
        S := StringReplace(S, Zen[i], Han[i], [rfReplaceAll]);
    Result := S;
end;

編集 削除
かず  2008-09-07 21:06:58  No: 31874  IP: 192.*.*.*

お勧めサイト
http://www.wwlnk.com/boheme/
の中のDelphi Tipsにあります。

編集 削除
ん?  2008-09-08 08:31:40  No: 31875  IP: 192.*.*.*

http://www.wwlnk.com/boheme/
> の中のDelphi Tipsにあります。

ttp://www.wwlnk.com/boheme/delphi/tips/tec1320.htm
それは、↑のことだと思うけど、LCMapString は、全角スペースや
「#」「$」等の記号も変換するでしょ?
"カタカナだけ変換したい"となると、変換しすぎ。

逆に、全角スペースと全角カタカナしかない文字列に限定できるのであれば、
LCMapString で全て変換して、igy さんの例示した StringReplace を使って、
半角スペースを全角に戻せばいいかと。

編集 削除