※初投稿です。お手柔らかにお願いします。
古いシステムなんかだと、銀行の口座名義に拗音(ァィゥェォャュョ)や促音(ッ)が使われていると支払処理を受け付けてくれない場合があります。
私の勤めている会社のシステム(SQLserver)がまさにそれで、手入力の場合には拗音・促音は受け付けないのですが、コピペなどだとすり抜けて入ってしまい、いざ支払処理をかけたらエラーが出る・・・(銀行にもよる)といったことが少なからずありました。
また、今後の予定として、システムに登録するための書類(Excelで作成)からデータを抜き出し、pyodbc
でSQLserverにダイレクトに転記させたいので、遅くともその時点で拗音・促音を修正しておかないと同じ轍を踏むことになることからそんなコードを書く必要が生じ、思い付きで書いたらまあそれなりにうまくいったという次第です。
そんなわけで、あまり需要がないかもしれませんが、せっかく書いたこちらでQiitaデビューさせていただきます!
you_soku = 'ァィゥェォャュョッ'
print('変更前-->', you_soku) # 確認用
ys_dict = {'ァ': 'ア', 'ィ': 'イ', 'ゥ': 'ウ', 'ェ': 'エ', 'ォ': 'オ', 'ャ': 'ヤ', 'ュ': 'ユ', 'ョ': 'ヨ', 'ッ': 'ツ'}
for ys in ys_dict.keys():
while ys in you_soku:
you_soku = you_soku.replace(ys, ys_dict[ys])
print('変更後-->', you_soku) # 確認用
変更前--> ァィゥェォャュョッ
変更後--> アイウエオヤユヨツ
拗音・促音の辞書をループさせ、キーが対象文字列内(上記の場合you_soku
に格納されている文字列内)にある限り、そのキーに対応した文字(バリュー)を置換させるようにしてあります。
お気づきの方もいらっしゃると思いますが、ネストされている対象文字列の変数(上記の場合you_soku
)を変えてしまうと、無限ループしてしまいます。。(実はやった口ですw)
実際にありそうな口座名義で試してみます。
もちろん、架空の方です。(軽く某ロックミュージシャンっぽい名前ですが、特にファンではございません。)
account_name = 'キッカワ ショウジ'
print('変更前-->', account_name) # 確認用
ys_dict = {'ァ': 'ア', 'ィ': 'イ', 'ゥ': 'ウ', 'ェ': 'エ', 'ォ': 'オ', 'ャ': 'ヤ', 'ュ': 'ユ', 'ョ': 'ヨ', 'ッ': 'ツ'}
for ys in ys_dict.keys():
while ys in account_name:
account_name = account_name.replace(ys, ys_dict[ys])
print('変更後-->', account_name) # 確認用
変更前--> キッカワ ショウジ
変更後--> キツカワ シヨウジ
本来であれば、このようなコードを使わずに済むよう、システム側で対応すべきなんですがね。
まあ言ってても始まらないので、書いてみました。
ご指摘・ご意見、大歓迎です。
まだまだ見習いですので、忌憚なくツッコミを入れていただければと思います。