在Cobol中写出一个字符串,并希望用全部X来掩盖一个accout数字的前6位数字?

时间:2014-01-10 18:57:39

标签: cobol

我不得不在Cobol写出一个银行帐号。报告的用户想要所有帐号,但最后四个X。我的数据结构如下。

数据结构:

        01 Account.
           05 acct   pic x(10) value spaces.

打印出来:

        XXXXXX5678

我尝试了以下内容:

        01 Account.
           05 six-digits pic x(06) value 'XXXXXX'.
           05 four-digits pic x(04) value spaces.

 MOVE new-account-value TO Accout.   -- this over writes the X's and screws up my printout
 WRITE E-Record FROM Account.

做这个简单操作的简单方法是什么? Cobol似乎总是有一点小故障。

新密码:(仍然不起作用) 为什么会这样呢?这就像是一个例子,我想如果我记得那个值将X保持为常量,但这可能是我出错了。

02  BANK-INFORMATIONE.                             
     04  H5-ROUTE.                                  
         10 ROUTE-UNUSED PIC X(09) VALUE ALL 'X'.   
         10 ROUTE-USED   PIC X(04) VALUE SPACES.    
     04  FILLER   PIC XX      VALUE SPACES.         
     04  H5-ACCTE.                                  
         10 ACCT-UNUSED PIC X(06) VALUE ALL 'X'.    
         10 ACCT-USED   PIC X(04) VALUE SPACES.     

4 个答案:

答案 0 :(得分:4)

    01 Account-Reference.
       05  acct-to-ignore   pic x(6).
       05  acct-to-use      pic x(4).

    01 Masked-Account.
       05  Masked-Account-Mask PIC X(6) VALUE ALL "X".
       05  Masked-Account-Data PIC X(4).

 MOVE acct-to-use TO Masked-Account-Data
 WRITE E-Record FROM Masked-Account

然后很清楚下一个阅读该程序的人的一切是什么。

我建议避免使用单字数据名。你永远都不知道你所选择的单词后来是否会成为编译器的“保留字”,而且描述性较差。

再次回答你的问题,如果它是一个报告,或者是一个报告,而不是某个文件,只需定义一个包含六个X(如上所述)的文字,然后是报告行本身的四个字节。如果您要将帐户写入文件以便稍后进行报告,则无需在文件本身中包含X.所以你可以使用你需要的四个低位数字。

答案 1 :(得分:2)

MOVE new-account-value TO Account

MOVE 'XXXXXX' TO Account(1:6)

WRITE E-Record FROM Account

答案 2 :(得分:2)

尝试以下方法:

    01 Account.
       05 six-digits pic x(06).
          88 Account-X value 'XXXXXX'.
       05 four-digits pic x(04).

MOVE new-account-value TO Account
SET Account-X to true
WRITE E-Record FROM Account

帐户前6位的88级定义 为你做覆盖。您使用的VALUE子句只是 曾经在初始程序加载时设置一次(而不是由INITIALIZE语句设置),所以一旦移动任何值 帐户丢失,无法重置。

或者其他明显的解决方案可能是:

MOVE new-account-value TO Account
MOVE 'XXXXXX' to six-digits
WRITE E-Record FROM Account

最后,Moot提出的解决方案也会起作用。

答案 3 :(得分:1)

@Moot答案应该可以正常工作。

另一个解决方案是

01  Account PIC X(010).
01  FILLER REDEFINES Account.
    03 HiddenPart PIC X(006).
    03 ShownPart PIC X(004).


MOVE new-account-value to Account.
MOVE ALL "X" TO HiddenPart.
WRITE E-Record FROM Account.