過去の桐井戸端BBS (桐ver.8)
8506 文字列中のカタカナのみを全角に変換したい WingBoy 2000/11/08-22:40
お世話になります。

文字列中において、英数字とカタカナが混在している場合
カタカナ部分のみを全角に置換したいのですが・・・。

例)シドニー(半角)2000 → シドニー(全角)2000

項目計算式等を用いて一括で行える方法ってありますでしょうか?

ご教授願います。<(_ _)>
8508 Re:文字列中のカタカナのみを全角に変換したい 宮城 2000/11/09-01:04
記事番号8506へのコメント
WingBoyさん、こんばんは。元データにひらがなの存在は考慮しなくていいんですよね?

#カナ(#半角(#かな(#全角([変換前]))))

でどうでしょう、と思ったら思わぬ伏兵、半角「ー」。(;_;) (えっと、この BBSでは半角カナ、全角に変換してくれます。)

こういうのがどれだけあるか考えるだけの理性が今なく、とりあえずこれだけにしちゃいますけど、これでどうだ?

#文字置換(#カナ(#半角(#かな(#全角([変換前])))),"半角ー","ー")

半角ーはこのとおりに記述しないでください。
もっとあればこれに重ねていくまでのこと。(カンマとかピリオドとか括弧とかとか。)

8509 Re:文字列中のカタカナのみを全角に変換したい mudagami 2000/11/09-01:11
記事番号8506へのコメント
 わたくしも仕事上必要なために、さんざん苦労して以下のようなものを作り使っています。
お役にたつでしょうか?
100項目近くのものを、項目ごとに選択 [項目]{#ISカナ([],0)>0,#IS半角([],0)>0} で、絞り込み
以下の処理をかけています。
「キー入力〜」の箇所とその下の「条件(&中止=0)〜」と、
終わりのほうの「確認〜」の箇所は、実際には入れていません。

**以下は一括処理の例です。**

変数 文字列{&文字列,&半角カナ}, \
   整数{&カナ,&半角,&中止},数値{&桁位置,&桁数}

繰り返し
  キー入力 (10,20)-(10,40),\
       プロンプト=" 半角カタカナのみ全角に変換します",\
       終了状態=&中止,&文字列
  条件 (&中止=0) 繰り返し中止

  条件 (#ISカナ(&文字列,0)=0) &カナ=0
  条件 (#IS半角(&文字列,0)=0) &半角=0

  *半角カタカナのみを全角に変換する繰り返し処理
  繰り返し (&カナ<>0 .and &半角<>0)
   *半角カナの最初の桁位置をもとめる
   &桁位置=1
   &中止=0
   繰り返し
   条件 (#JIS(#部分列(&文字列,&桁位置,1))<166 .or \
#JIS(#部分列(&文字列,&桁位置,1))>223) &桁位置=&桁位置+1
   条件 (#文字数(&文字列)<&桁位置) &中止=1
   条件 (&中止=1) 繰り返し中止
   条件 (#JIS(#部分列(&文字列,&桁位置,1))>=166 .and \
  #JIS(#部分列(&文字列,&桁位置,1))<=223) 繰り返し中止
   繰り返し終了
   条件 (&中止=1) 繰り返し中止
   &半角カナ=#部分列(&文字列,&桁位置)
   *半角カナの桁数を求める
   &桁数=1
   繰り返し
   条件 (#JIS(#部分列(&半角カナ,&桁数+1,1))<166 .or \
  #JIS(#部分列(&半角カナ,&桁数+1,1))>223) 繰り返し中止
   条件 (#JIS(#部分列(&半角カナ,&桁数+1,1))>=166 .and \
  #JIS(#部分列(&半角カナ,&桁数+1,1))<=223) &桁数=&桁数+1
   繰り返し終了
   &半角カナ=#部分列(&半角カナ,1,&桁数)
   &文字列=#文字置換(&文字列,&半角カナ,#全角(&半角カナ))
   繰り返し終了

 確認 &文字列

繰り返し終了


8514 Re:文字列中のカタカナのみを全角に変換したい 悲しげ 2000/11/09-12:50
記事番号8506へのコメント
どもっ、WingBoyさん
極めて単純な方法ですが「#文字置換」(または#s)関数を使って、
すべての半角カナを全角カナに変換すると云う方法を考えてみました。
超単純ながらも、様々な表、様々な項目にも応用できるように汎用的な
一括処理として書いてみました(細部は未チェックですが)。

濁点の類を先に変換したこと
処理の経過を見えるようにしたこと(遅くなっただけ?)
項目を項目番号で指定するようにして汎用化したこと等が特徴です。

で、訳有り(のつもり)で、【多遊】さんの掲示板
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi
の#1519に置かせていただきました。
でも、改行の件はうまく活きましたが、半角カナ文字はやはり全角になっちゃいました。(^^;)
#s([],"ガ","ガ")
   ↑  ↑
  半角  全角
どちらも同じに見えるでしょうけど、前の方が半角、後ろが全角カナだったのでして、そこんとこよろしく。(^^;)
8521 ひらがなもアリなんです。 WingBoy 2000/11/09-13:59
記事番号8508へのコメント
>WingBoyさん、こんばんは。元データにひらがなの存在は考慮しなくて
>いいんですよね?

レスありがとうございました。

私の実例提示が悪かったのですが、元データには英数字、カタカナ、ひらがな、漢字などが全角・半角混在で入っております。
(半角「ー」含む)

この中でカタカナ以外は元の状態で残し、カタカナのみを全角に揃えたいというのが趣旨でしたが、明らかにこちらの説明不足でした。
余計なお時間を取らせてしまって申し訳ありません。<(_ _)>

8524 Re:ひらがなもアリなんです。 宮城 2000/11/09-14:43
記事番号8521へのコメント
わあ。となると、mudagamiさん・悲しげさんのように一字ずつ検査しながら変換という一括処理しかないでしょう。
私のは半角ひらがなはないというのを逆手に取った手ですので。

悲しげさんがお書きのとおり、濁点処理を考慮する必要があります。
それから、「ー」と「−」の混在にも注意すべきでしょうね。
(ただし、これはロジックではおそらく処理不能。
個別に判断しないとダメでしょう。)

8534 Re:文字列中のカタカナのみを全角に変換したい WingBoy 2000/11/10-11:10
記事番号8509へのコメント
レスありがとうございます。

早速試してみましたが、イマイチうまく動きません。
処理を開始しても、置換ルーチンに入っていかない・・・?

一括処理を自分でいじるのはまだ不得意なので、
試していじくって、また試して・・・という感じで地道にやっております。

も少し頑張ってみます。
8535 Re:文字列中のカタカナのみを全角に変換したい mudagami 2000/11/10-12:11
記事番号8534へのコメント
>早速試してみましたが、イマイチうまく動きません。
>処理を開始しても、置換ルーチンに入っていかない・・・?

「**以下は一括処理の例です。**」←以降の行をクリップボードにコピーし、

 一括処理を新規で開き、張り付けるだけで動きます。
 後はご自分の一括処理にあわせ調整してください。

8543 Re:文字列中のカタカナのみを全角に変換したい kamiya 2000/11/10-22:50
記事番号8506へのコメント
*** カタカナだけを全角に ***
変数宣言 固有,整数{&X,&文字数}
変数宣言 固有,文字列{&文字}
表 "cc"
繰り返し (#終端行=0)
代入 &文字 =[項目1]
代入 &文字数=#文字数(&文字)
*   1文字づつ変換する
  繰り返し &X=1,&文字数 
* 濁点、半濁点付きの判定
IF (#ISカナ(#部分列(&文字,&X,1),1)=1 .and \
(#部分列(&文字,&X+1,1)="゛" .or #部分列(&文字,&X+1,1)="゜"))
代入 &文字=#部分列(&文字,1,&X-1)+#全角(#部分列(&文字,&X,2))+ \
#部分列(&文字,&X+2)
ELSE
* 濁点、半濁点以外の場合
IF (#ISカナ(#部分列(&文字,&X,1),1)=1)
代入 &文字=#部分列(&文字,1,&X-1)+#全角(#部分列(&文字,&X,1))+
\
#部分列(&文字,&X+1)
END
END
繰り返し終了
行訂正 [項目1]=&文字
  ジャンプ 行番号=+1
繰り返し終了


ただし、データ件数が多いとかなり時間がかかります。
8572 Re:文字列中のカタカナのみを全角に変換したい WingBoy 2000/11/13-09:42
記事番号8543へのコメント
お返事ありがとうございます。<(_ _)>

早速試してみましたが、2つほど気になる点がありました。

1.半角「ガ」などは「カ゛」になってしまう。
2.文字列の1文字目がカタカナ以外の文字で始まると変換されない。

むつかしいですねぇ・・・。
8573 うまくいきました! WingBoy 2000/11/13-10:13
記事番号8514へのコメント
ありがとうございます。

変換されたデータを今、目検でチェックしていますがうまくいっているようです!

しかし「HP上では勝手に変換されてしまう」アレって、
ブラウザソウト中にそういうロジックが盛り込まれているという事なのでしょうか・・・?
8574 Re:うまくいきました! hidetake 2000/11/13-10:45
記事番号8573へのコメント
>しかし「HP上では勝手に変換されてしまう」アレって、
>ブラウザソウト中にそういうロジックが盛り込まれている
>という事なのでしょうか・・・?

インターネット上で半角カナ(1byteカナ)を使うと、いろいろ問題が生ずる場合があるので、
CGI 上で半角カナは全角に変換する処理を行っています。
(掲示板の CGI がブラウザのデータを受けとった後に処理)

CGI では、処理上 jcode.pl と言うライブラリを日本語処理の関係で使うので、

&jcode'h2z_sjis(*Value);

と言う1行を追加するだけで、半角カナは全角カナに変換されます。

;# &jcode'h2z_xxx(*line)
;#  JIS X0201 KANA (so-called Hankaku-KANA) to X0208 KANA
;#  (Zenkaku-KANA) code conversion routine. String xxx is
;#  any of "jis", "sjis" and "euc". From the difficulty
;#  of recognizing code set from 1-byte KATAKANA string,
;#  automatic code recognition is not supported.
;#


8585 勉強になります。 WingBoy 2000/11/14-12:29
記事番号8574へのコメント
>インターネット上で半角カナ(1byteカナ)を使うと、いろいろ
>問題が生ずる場合があるので、CGI 上で半角カナは全角に
>変換する処理を行っています。

なるほどー。
CGIというものが何なのかピンとこない私ですが(^^;
なんだか便利そうでいいなぁ。

戻る