我如何转换'写给数字的信?

时间:2016-03-24 13:13:35

标签: cobol

我正在编写一个将常规银行帐号转换为IBAN号的程序。这个过程的一部分意味着我需要将字母(在Bank-ID,Branch-ID和ISO-Country-CODE等字段中)转换为与字母+9中的位置相对应的数字。所以A = 10,B = 11 ,Z = 35。

基本上,以下的Bank-ID:" LOYD"会成为" 21243413"。

我需要稍后将这些数字放在一个字符串中,以便用它进行计算。

现在,如果输入的银行ID始终具有相同的长度并始终是字母,那么我将其放在剩余的工作存储空间中:

LETTERS    PIC X(36) VALUE '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

然后我写下这个:

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可能是四个位置长,甚至更长。另外,我正在使用PIC N字段,这意味着INSPECT无法正常工作。

编辑额外信息

我正在使用其中有国民的字帖。 其结构如下:

     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).

这是一个叫做程序。

1 个答案:

答案 0 :(得分: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
                     "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".
   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.

没有什么特别复杂的。简单的重新申报事项。