我不得不在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.
答案 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.