お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"ローマ字からカナへ変換"

この発言に対し以下のコメントが寄せられています
#01362 ひの さん RE:ローマ字からカナへ変換

皆さん こんにちは、風の鳩サブレーです。 ローマ字を半角カナに変換する関数です。 どうやって作ってよいか分からなかったので力ずくで書きました(^^; 厳密なチェックをしていないので 正しくないローマ字を入れると適当に解釈して変換します。 エラーは出しません。 もしかしてIMEのAPIでできたりして(^^; nifty:FDELPHI/MES/15/102 の文字変換ルーチン を使っていますので HENKANJ.PAS をUSESに追加してください。 // ローマ字→半角カナ 変換 function rome2kana(str : string):string; var x : string; i,b,s,l,tt : integer; h : boolean; v : array[1..100] of string; begin for i := 1 to 100 do v[i] := ''; // a-o:+0 y:+1 h:+2 s:+3 v[1] := 'あ い う え お '; //aiueo v[5] := 'か き く け こ '; //k v[6] := 'キャ キィ キュ キェ キョ '; //ky v[10] := 'さ し す せ そ '; //s v[11] := 'シャ シィ シュ シェ ショ '; //sy v[12] := 'シャ シ シュ シェ ショ '; //sh v[15] := ' '; //c v[16] := 'チャ チィ チュ チェ チョ '; //cy v[17] := 'チャ チ チュ チェ チョ '; //ch v[20] := 'た ち つ て と '; //t v[21] := 'チャ チィ チュ チェ チョ '; //ty v[22] := 'テャ ティ テュ テェ テョ '; //th v[23] := 'ツァ ツィ ツ ツェ ツォ '; //ts v[25] := 'な に ぬ ね の '; //n v[26] := 'ニャ ニィ ニュ ニェ ニョ '; //ny v[30] := 'は ひ ふ へ ほ '; //h v[31] := 'ヒャ ヒィ ヒュ ヒェ ヒョ '; //hy v[35] := 'ま み む め も '; //m v[36] := 'ミャ ミィ ミュ ミェ ミョ '; //my v[40] := 'や い ゆ え よ '; //y v[45] := 'ら り る れ ろ '; //r v[46] := 'リャ リィ リュ リェ リョ '; //ry v[50] := 'わ い う え を '; //w v[55] := 'ファ フィ ふ フェ フォ '; //f v[56] := 'フャ フィ フュ フェ フョ '; //fy v[60] := 'ジャじ ジュジェジョ'; //j v[61] := 'ジャジィジュジュジョ'; //jy v[65] := 'が ぎ ぐ げ ご '; //g v[66] := 'ギャギィギュギェギョ'; //gy v[70] := 'ざ じ ず ぜ ぞ '; //z v[71] := 'ジャジィジュジュジョ'; //zy v[75] := 'だ ぢ づ で ど '; //d v[76] := 'ヂャヂィヂュヂェヂョ'; //dy v[80] := 'ば び ぶ べ ぼ '; //b v[81] := 'ビャビィビュビェビョ'; //by v[85] := 'ぱ ぴ ぷ ぺ ぽ '; //p v[86] := 'ピャピィピュピェピョ'; //py v[90] := 'ヴァヴィヴ ヴェヴォ'; //v result := ''; h := True; s := 0; x := ansilowercase(trim(ZenToHank(str))); l := length(x); i := 1; while i <= l do begin if IsDBCSLeadByte(ord(x[i])) then inc(i,2) else if x[i] = ' ' then begin if (not h) and (s = 25) then result := result + 'ン'; h := True; inc(i); result := result + ' '; end else if h then begin s := 0; case x[i] of 'a' : s := -1; 'i' : s := -2; 'u' : s := -3; 'e' : s := -4; 'o' : s := -5; 'k' : s := 5; 's' : s := 10; 'c' : s := 15; 't' : s := 20; 'n' : s := 25; 'h' : s := 30; 'm' : s := 35; 'y' : s := 40; 'r' : s := 45; 'w' : s := 50; 'f' : s := 55; 'j' : s := 60; 'g' : s := 65; 'z' : s := 70; 'd' : s := 75; 'b' : s := 80; 'p' : s := 85; 'v' : s := 90; '-' : s := 999; 'ー' : s := 999; end; if s < 0 then begin result := result + trim(copy(v[1],s*-3-2,3)); h := true; s := 0; end else if s = 999 then begin result := result + 'ー'; h := true; s := 0; end else if s > 1 then begin h := False; end; inc(i); end else begin b := 0; case x[i] of 'a' : b := 1; 'i' : b := 2; 'u' : b := 3; 'e' : b := 4; 'o' : b := 5; 'y' : b := 6; 'h' : b := 7; 's' : b := 8; 'n' : b := 9; end; inc(i); if (b > 0) and (b < 6) then begin result := result + trim(copy(v[s],b*3-2,3)); h := true; end else if (b < 9) and (b > 0) then begin tt := s + b - 5; if v[tt] <> '' then s := tt; end; // n+子音(yを除く) = ん if (b in [0,6,7,8,9]) and (s = 25) then begin result := result + 'ン'; h := true; if b < 9 then dec(i); end; if (b in [0,6,7,8]) and (x[i-2] = x[i-1]) then begin result := result + 'ッ'; end; end; end; if (not h) and (s = 25) then begin result := result + 'ン'; end; result := zentohank(result); end; 風の鳩サブレー(JBG03220)  - FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/07/21 - Original document by 風の鳩サブレー 氏 ID:(JBG03220)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum