半角・全角混在文字列を全部全角に変換するには?


まーしー  2005-12-08 09:41:02  No: 19099

半角・全角混在文字列を全部全角に変換するには?で全部を変換することはできましたが、この機能を使って指定した文字だけを全角から半角に変えることはできますか?


きりり  2005-12-12 21:50:04  No: 19100

レスがつかないようなので・・。

> この機能を使って指定した文字だけを全角から半角に変えることはできますか?

StringReplaceを併用したら出来るんでないですか?


どやさ  2005-12-14 01:44:28  No: 19101

全部の変換ができるのであれば、
指定文字をチェックすればできるはずだが・・・

あえていいますが、
レスがつかないのではなくて、
レスのつけようがない質問の書き方だからです。

この質問内容であえてベストの回答を出すとすれば
「if 〜 then で条件判断して変更してください。」


きりり  2005-12-14 19:15:23  No: 19102

> あえていいますが、
> レスがつかないのではなくて、
> レスのつけようがない質問の書き方だからです。

ん?これは私に対して?
私的に途方も無い質問とも思えなかったのでそう書いただけなのですが・・。

> 「if 〜 then で条件判断して変更してください。」

ん〜。なんでいちいちif文を使うのだろう?
できないことないでしょうけど、if文使うなら1文字ずつ切り出して判断することになるのでは?
しかもこれが文中に1文字とは限らないわけでですよね?
ではforでまわすとかのロジックを組まねばなりませんが、
素直に考えればStringReplaceでできると思うんですよ。

> 指定した文字だけを全角から半角に変えることはできますか?

ということなので、
具体例で言えば半角英字の「A」を「A」にしたいということでしょ?

・・だって指定した文字”だけ”なんだから。


どやさ  2005-12-20 03:48:43  No: 19103

きりりさんに言ったんじゃないですよ。すみません。

>半角・全角混在文字列を全部全角に変換するには?で全部を変換することは>できましたが、この機能を使って指定した文字だけを全角から半角に変える>ことはできますか?
質問の中に「この機能を使って」と書かれているでしょ。
「全部を変換することはできました」だけでは私には
どのような処理方法なのかはどうやってもわかりません。

じゃあ、どうすれば?ってことで、
if <<変換文字>> then <<作成したプログラムの呼び出し>>
をすればできるよってことですよ。

>指定した文字だけを全角から半角に変えることはできますか?
質問がこれだけなら、きららさんの回答でも
まんざらまちがってはいないと思いますけど。

質問者は、文字列中に含まれる指定した文字全てなのか、
指定した1文字だけなのかもわかりませんよね。

回答者に負担をかけないで、ベストな回答を期待する
質問にしてもらえれば良いなと思っただけです。
実際、質問者は放置プレイしてますし・・・


きりり  2005-12-20 21:52:21  No: 19104

お返事ども。

> じゃあ、どうすれば?ってことで、
> if <<変換文字>> then <<作成したプログラムの呼び出し>>
> をすればできるよってことですよ。

ん〜。だからif文使うと、その<<変換文字>>とやらで、
可能性のある文字全てを指定しなければなりませんよね?
半角全角って事は英数字だけじゃなくカナもですよね?
ちなみに@みたいな記号も半角全角ありますよw

> 質問者は、文字列中に含まれる指定した文字全てなのか、
> 指定した1文字だけなのかもわかりませんよね。

どやささんも指摘のとおり、質問者はそこまで細かく指定してません。
なので

//  S    対象の文字列
//  Edit1  全角から半角へ置き換えたい文字
//  ZenToHan  全角→半角への変換関数

StringReplace( S, Edit1.Text, ZenToHan(Edit1.Text), [rfReplaceAll] );

この1行で済むのでは?と私は思っただけです。
文中のAとBとCみたいに、飛び飛びの指定であったとしても、
1文字単位で切り出して上記のStringReplaceをループさせれば良いのでは?
前述のようにifで判定なんて、文字数分必要な気がするのは私だけ??

> 質問がこれだけなら、きららさんの回答でも
> まんざらまちがってはいないと思いますけど。

まんざら?
なんかカチンと来る言い方だな(苦笑
しかも、きららじゃなくて「きりり」なのでw

こういう書き方されるなら、別の意味で興味がわくのですが、
if文で書いたサンプルを教えてください。

> 回答者に負担をかけないで、ベストな回答を期待する
> 質問にしてもらえれば良いなと思っただけです。
> 実際、質問者は放置プレイしてますし・・・

確かに質問者の放置はいただけないですね。
ですが、質問者が逃げ出したくなるような解答も先人として避けるべきでは?
自分宛に書かれたわけでもあるまいし、わざわざ文句を書くくらいなら放置すべきかと。


横ヤリ  2005-12-20 22:49:37  No: 19105

どやさ氏のこの回答
> この質問内容であえてベストの回答を出すとすれば
> 「if 〜 then で条件判断して変更してください。」

> if <<変換文字>> then <<作成したプログラムの呼び出し>>

これってベストとは言い難い。
これで解決できるスキルを持ち合わせているなら、こののような質問なんてしないと思う。

それはさておき、言いいたことはこんなことでしょうね。
『変換対象の文字列を一文字ずつ「変換する文字であるか判定し」
変換する文字である場合は、その文字を半角に変換するプログラムを呼び出せ。』
それに対しきりり氏は、
『変換すべき文字1文字を、変換対象の文字列内に含まれているか否かは関係なく
StringReplaceで置換してしまえ。
複数変換したいなら、StringReplaceを複数回繰り返せ』
であると。

第三者的に見れば、二人の違いはアルゴリズムの違いなだけ。

ただし、どやさ氏の考え方では、もともと半角・全角混在している文字列が対象のとき、
「1文字」という判定に、ByteType関数を使い半角・全角の判定が必要だったりします。

> 質問者は、文字列中に含まれる指定した文字全てなのか、
> 指定した1文字だけなのかもわかりませんよね。
どやさ氏自身、上記のように発言されていますから、質問者がどのような文字列を対象に
変換したいのか明確に指摘していない以上、『半角・全角混在文字列の、
一部全角文字のみ変換したい』という可能性も否定できません。

ならば、一文字一文字の判定が必要ないStringReplaceを使った方が、
よりベストな回答であると思われます。
スキルアップを本当に望むのであれば、一文字ずつ変換するどやさ氏の方法を勧めます。


どやさ  2005-12-21 01:03:32  No: 19106

https://www.petitmonte.com/bbs/answers?question_id=81


どやさ  2005-12-21 01:31:36  No: 19107

すみません。途中で送信してしまいました。

さて、たぶん、ここからの続きのようですね。
タイトルがまったく同じだけどハンドルが違う。
>半角・全角混在文字列を全部全角に変換するには?で全部を変換することはできましたが
今回の質問の「半角・全角混在文字列を全部全角に変換するには?」は
過去ログのことをさしているんでしょうね。

StringReplace を使用する。と回答すれば、質問である

>指定した文字だけを全角から半角に変えることはできますか
この目的は達成するけど、

>この機能を使って
これを達成することできませんよね。
無理やりするとすれば、この機能を使ってすべて変換したあと
StringReplace を使って
指定してした文字以外の文字を再度逆(元)に変換する?

私が言いたいことはプログラムどうこうの前に質問に問題があると
思っただけで、if else といった回答に関しても、
中身のわからない関数を使うなら、
外側で分岐してその関数を呼ぶように  if else で分岐
しましょうってことです。
確かに横ヤリさんの言うように
相手のスキルまでは考慮していませんけど。


横ヤリ  2005-12-21 04:11:28  No: 19108

なるほどね、過去ログから引っ張り出してきた情報か。
これで話がつながった。

きりりさんの回答
> StringReplace( S, Edit1.Text, ZenToHan(Edit1.Text), [rfReplaceAll] );
これが、そのものずばりです。

ZenToHanは、Delphian World から拾ってきたユニットの関数。
この機能(ZenToHan)を使うということで、変換したい一文字と、
ZenToHanにより、半角に変換した一文字(変換後の文字)で置換する。

指定した文字だけ変換できるし、「この機能(ZenToHan)」も使う。
これ以上ない回答ですな。

したがって、質問を深読みする必要なく、上記の一行を書いておけば完了ですわ。
これで、「わからん」とか言われたら、「もっと情報出せ」とかつっこめばいいだけです。

完了〜。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加