2016-03-24 5 views
0

私は、通常の銀行口座番号をIBAN番号に変換するプログラムを作成しています。このプロセスの一部は、アルファベット+ 9での位置に対応する数字に(銀行ID、支店ID、ISO国コードなどのフィールドの)文字を変換する必要があることを意味します。したがって、A = 10、B = 11 、Z = 35。文字を数字に変換するにはどうすればよいですか?

基本的に、次の銀行ID: "LOYD"は "21243413"になります。

これらの数値を後で文字列に入れて計算する必要があります。今

、入力された銀行-IDは、常に同じ長さで、いつも手紙、私は私の作業ストレージの残りの部分の間にこれを入れたいならば:

LETTERS PIC X(36) VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. 

そして、私はこれを書きたいです:

INITIALIZE BANK-CODE-NR 
      PERFORM VARYING LOOP-COUNTR FROM 1 BY 1 UNTIL 
          LOOP-COUNTR > 4 
      INSPECT   LETTERS 
      TALLYING  BANK-CODE-NR(LOOP-COUNTER) FOR 
          CHARACTERS BEFORE INITIAL BANK-CD IN 
          COPYBOOK(LOOP-COUNTR:1) 
      END-PERFORM 

しかし、この場合には、銀行のIDは、長い4つのポジション、あるいはさらに長いかもしれません。さらに、私はPIC Nフィールドで作業しています。つまり、INSPECTは機能しません。 EXTRA INFO

FOR

EDITED私はそれで国民を持っているコピーブックで働いています。 これは次のように構成されています

 
    01 Input-IBAN. 
      05 COUNTRY-CODE    PIC N(02). 
      05 BANK-ID     PIC N(10). 
      05 BRANCH-ID     PIC N(10). 
      05 ACCOUNT-NR     PIC N(28). 
      05 Output-IBAN    PIC N(34).

は、それが呼ばれるプログラムです。

+0

もう一度定義を表示する必要があります。彼らはまだPIC Nフィールドですか? –

+0

ループを一切使わずに実行できます。 –

+0

はい、それでもPIC Nフィールドです。私のポストを更新しました – Lena

答えて

1
IDENTIFICATION DIVISION. 
PROGRAM-ID. Q36201076. 
AUTHOR. Magoo. 
ENVIRONMENT DIVISION. 
INPUT-OUTPUT SECTION. 
WORKING-STORAGE SECTION. 
01 LETTERS. 
    03 LETTER-STRING     PIC X(36) VALUE 
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ". 
    03 FILLER REDEFINES LETTER-STRING. 
     05 LETTER-CHARACTER    PIC X(01) OCCURS 36. 

01 BANK-CODE. 
    03 BANK-CODE-CHARACTER    PIC X(01) OCCURS 4. 

01 BANK-CODE-CONVERTED. 
    03 BANK-CODE-NUMBER    PIC 9(02) OCCURS 4. 

01 wORK-VARIABLES. 
    03 LETTER-INDEX     PIC 9(02). 
    03 BANK-INDEX      PIC 9(01). 
    03 REPLACED-COUNT     PIC 9(01) VALUE 0. 

PROCEDURE DIVISION. 
MAIN-RTN. 
    MOVE "LOYD"  TO BANK-CODE. 
    PERFORM 
     VARYING LETTER-INDEX FROM 1 BY 1 
     UNTIL (LETTER-INDEX > 36) OR (REPLACED-COUNT = 4) 
     PERFORM 
     VARYING BANK-INDEX FROM 1 BY 1 
     UNTIL (BANK-INDEX > 4) OR (REPLACED-COUNT = 4) 

     IF BANK-CODE-CHARACTER(BANK-INDEX) = LETTER-CHARACTER(LETTER-INDEX) 
     SUBTRACT 1 
      FROM LETTER-INDEX 
         GIVING BANK-CODE-NUMBER(BANK-INDEX) 
     ADD 1    TO REPLACED-COUNT 
     END-IF 
     END-PERFORM 
    END-PERFORM. 

    DISPLAY BANK-CODE "-->" BANK-CODE-CONVERTED. 
    ACCEPT BANK-CODE. 
    STOP RUN. 

特に複雑なものはありません。再宣言の単純な問題。

+0

私の質問が愚かな場合私の謝罪が、これはおそらく4文字以上の銀行コードの問題を解決する方法はありますか?私は例としてLOYDを使用しましたが、プログラムは長さが変わって世界のすべてからの銀行コードを扱います。 – Lena

+0

"発生する"句のような重要な箇所では "4"を、バンクコードフィールドの長さにはプログラムコードを変更してください。あなたは4を使用しました。私は4を使用しました。フィールドの長さは関係ありません。たとえば、数字を含めてすべて20文字が含まれていて、これらをすべて同じ方法でエンコードする必要があります。 '〜' 20 '注意すべき点は、スペースやその他の文字が 'letter-string'にない場合、' BANK-CODE-CONVERTED'フィールドの対応する位置は変更されないことです。あなたが提供する情報でのみ働くことができます。 – Magoo

関連する問題