• ベストアンサー

COBOLで半角カナを全角カナに変換

COBOLの初心者です。半角カナを全角カナに変換するルーチンを作成するように言われて困っています。ヒントとなるようなサンプルソースを教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
noname#258293
noname#258293
回答No.5

REDEFINES がちゃんと理解できていないのでしょうか。 たとえば、こんな定義をしたとします。 01 TEMP.   05 TEMP-TEXT PIC X(10) VALUE 'ABCDEFGHIJ'.   05 TEMP-TEXTR REDEFINES TEMP-TEXT.    07 TEMP-1 PIC X(02).    07 TEMP-2 PIC X(02).    07 TEMP-3 PIC X(02).    07 TEMP-4 PIC X(02).    07 TEMP-5 PIC X(02). 05 TEMP-TEXT PIC X(10) VALUE 'ABCDEFGHIJ'. ではメモリ上の各アドレスに次のようにデータが入ります。 アドレス  文字 ADDR0001| A ADDR0002| B ADDR0003| C ADDR0004| D ADDR0005| E ADDR0006| F ADDR0007| G ADDR0008| H ADDR0009| I ADDR0010| J 05 TEMP-TEXTR REDEFINES TEMP-TEXT. は メモリのADDR1からどのように項目に 割り当てるかが指定されます。 この例だと TEMP-1 から 順に2文字ずつなので TEMP-1には ADDR0001| A ADDR0002| B TEMP-2には ADDR0003| C ADDR0004| D TEMP-3には ADDR0005| E ADDR0006| F TEMP-4には ADDR0007| G ADDR0008| H TEMP-5には ADDR0009| I ADDR0010| J 割り当てられます。

mn777naga
質問者

補足

すいません。REDEFINESはわかっていませんでした。ようやく理解できました。 ようやく、検索の処理にたどりついたのですが、WK-BBBBの半角の入力されたエリアを、WK-AAAA出力エリアに全角カナで出力しようと思い以下の処理を書いたのですが、無限ループに入ってしまいました。 以下の比較処理は、どこがわるいんでしょうか。     DATA DIVISION.     WORKING-STORAGE SECTION.     01 A-RECORD-ALT.     05 FILLER PIC X(03) VALUE "アア".     05 FILLER PIC X(03) VALUE "イイ".     05 FILLER PIC X(03) VALUE "ウウ".     05 FILLER PIC X(03) VALUE "ウウ".     01 WK-TBL-MASTER REDEFINES A-RECORD-ALT.       03 WK-TBL-TABLE OCCURS 2     INDEXED BY TBL-IDX.     05 WK-TBL-CODE PIC X(01).     05 WK-TBL-STR-CODE PIC X(02).    01 WK-AAAA PIC X(10). 01 WK-BBBB PIC X(05). 01 I PIC 9(02). 01 X PIC 9(02). 03 WK-TBL-TABLE OCCURS 2     INDEXED BY TBL-IDX.     05 WK-TBL-CODE PIC X(01).     05 WK-TBL-STR-CODE PIC X(02).     01 WK-AAAA PIC X(10). 01 WK-BBBB PIC X(05). 01 I PIC 9(02). 01 X PIC 9(02). MOVE "イウアイウ" TO WK-BBBB MOVE 1 TO I MOVE 1 TO X PERFORM UNTIL I > 5 SET TBL-IDX TO 1 DISPLAY WK-BBBB(I:1)     SEARCH WK-TBL-TABLE VARYING TBL-IDX AT END MOVE SPACE TO WK-AAAA CONTINUE ; WHEN WK-TBL-CODE(TBL-IDX)=WK-BBBB(I:1) DISPLAY WK-TBL-CODE(TBL-IDX) DISPLAY WK-BBBB(I:1) MOVE WK-TBL-STR-CODE(TBL-IDX) TO WK-AAAA(X:1) ADD 1 TO I DISPLAY I ADD 2 TO X DISPLAY WK-TBL-STR-CODE(TBL-IDX) DISPLAY WK-AAAA(X:2) SET TBL-IDX UP BY 1; END-SEARCH END-PERFORM.      STOP RUN.

すると、全ての回答が全文表示されます。

その他の回答 (6)

noname#258293
noname#258293
回答No.7

補足です。 一通り動くようになったら、カタカナ以外の文字を変換処理に入れたらどうなるかも確認してください。

mn777naga
質問者

補足

大変親切にありがとうございました。テーブルの定義に誤りがありました。解決致しました。 ありがとうございました。

すると、全ての回答が全文表示されます。
noname#258293
noname#258293
回答No.6

DISPLAY を随所に入れているのはいいことです。せっかくDISPLAYしているのですからその結果を活用しましょう。 DISPLAYされた内容から処理がどこを流れているか確認できるはずです。 自分が思っているとおりに流れていないところがあったら、何故そこに流れたのかを考えてください。 いただいたソースには複数の問題がありますが、WK-TBL-MASTER をDISPLAY してみると何かに気づくはずです。

すると、全ての回答が全文表示されます。
  • root139
  • ベストアンサー率60% (488/809)
回答No.4

Shift JISでしたら、エスケープシーケンスが無いので、対象の1byteとその前後の1byteをチェックすれば、必ず何の文字か判断できますね。 http://ja.wikipedia.org/wiki/Shift_JIS どのコードをどのコードに変換するかは下記の表を見れば分かると思います。 半角カナを含む文字コード表 http://ash.jp/code/codetbl1.htm 全角カナを含む文字コード表 http://ash.jp/code/codetbl2.htm 詳しくは参考URLのページなどを見ると良いかと。

参考URL:
http://euc.jp/i18n/charcode.ja.html
すると、全ての回答が全文表示されます。
回答No.3

>03 WK-TBL-TABLE OCCURS 0 TO 2 > DEPENDING ON TBL-SIZE 本題からそれますが、0~2の可変長って、何をやりたいのでしょう? >テーブルに初期値を VALUE句で定義 VALUE句で初期値を入れた領域を、このテーブルではREDEFINEで参照する形にすればいいと思います。

mn777naga
質問者

補足

すいません。本当に初心者で、例えば、 001110 01 WK-TBL-MASTER. 001120 03 WK-TBL-SIZE PIC 9(02). 001130 03 WK-TBL-TABLE OCCURS 3 001140 DEPENDING ON WK-TBL-SIZE 001150 INDEXED BY TBL-IDX. 001160 05 WK-TBL-CODE PIC X(01). 001170 05 WK-TBL-STR-CODE PIC N(02). 上記の定義して、とりあえず、半角カナ "ア イ ウ"を全角カナの"ア イ ウ"に変換するためのテーブルを定義したいです。 例: 半角アの WK-TBL-CODE(1) 全角の"ア"、WK-TBL-STR-CODE(1)の文字といったように定義したテーブル準備したいです。 SEARCHを使って、実際の半角カナを全角カナに変換しようとしています。 本当に初心者で、説明を不足していて申し訳ありません。 REDEFINEは項目の再定義と知っているんですが、VALUE句で定義した初期値、上記の2次元表にどうわりあてていいかわかりません。 すいません。宜しくお願いします。

すると、全ての回答が全文表示されます。
noname#258293
noname#258293
回答No.2

>内部に変換テーブルをもって力技で変換しろと言われています というのがヒントですね。 計算で求める必要はないということです。 とっても簡単なのでご自分で考えてみましょう。 カタカナは全部で何文字ですか。 OCCURS はご存じですか?

mn777naga
質問者

補足

本当に初心者ですいません。 01 WK-TBL-MASTER. 03 WK-TBL-SIZE PIC 9(02). 03 WK-TBL-TABLE OCCURS 0 TO 2 DEPENDING ON TBL-SIZE INDEXED BY TBL-IDX. 05 WK-TBL-CODE PIC X(01). 05 WK-TBL-STR-CODE PIC X(02). いろいろ調べながら以下のような検索テーブルを作成しました。 WK-TBL-CODEには、半角の文字を。WK-TBL-STR-CODEには、変換後の全角文字を初期値として定義し、検索用テーブルを作成しようとしています。上記のテーブルに初期値を VALUE句で定義するためには、どうすればいいんでしょうか。

すると、全ての回答が全文表示されます。
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

対象の文字エンコーディングが何なのかを書かなければ、回答が付かないと思いますよ。 もし文字エンコーディングが分からなければ、OSや機種などの環境を書かれると良いかと。(Windows/ACOS/FACOMなど) 特にUNIX・Windows系と汎用機系では、一般的に使われる文字エンコード方式が全く違いますので処理も異なります。

mn777naga
質問者

補足

すいません。OSはLinuxです。文字は、文字エンコーディングS-JISデータです。内部に変換テーブルをもって力技で変換しろと言われています。大変申し訳ございませんが宜しくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A