我正在编写一个将常规银行帐号转换为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).
这是一个叫做程序。
答案 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.
没有什么特别复杂的。简单的重新申报事项。