我是该网站和 COBOL 的新手。我正在尝试编写一个程序,它读取一个 80 字节的文件,并找到一个特定的字符串并抓住另一个紧随其后的字符串。我遇到的唯一问题是字符串的起始位置并不总是在整个文件中的同一字节中。例如,我试图在下面找到的字符串是在整个文件中出现两次的 LENGTH(#####) 字符串:
长度(14909135)文件ID(DD:EDIREC)MSGDATE(130723)MSGDATELONG(20130723) MSGTIME(091053) MSGSEQO(001390) MSGNAME(00008557) MSGSEQNO(00001) SESSIONKEY(XXXXXXXX) DELIMITED(E) 系统名(XXXXX-XX) 系统级(XXXX) 时区(L) DATATYPE(E) EDITYPE(XXX) SENDERFILE(#####) RECFM(??????) RECLEN(#) RECDLM(E) UNIQUEID(XXXXXXXX) SYSTYPE(##) SYSVER(#); 收到的帐户(XXXX)用户ID(XXXXXXXX)类别(#E2)费用(3)长度(14911043) 文件ID(DD:EDIREC)MSGDATE(130723)MSGDATELONG(20130723)MSGTIME(093045) MSGSEQO(001392) MSGSEQNO(00000) SESSIONKEY(XXXXXXXX) DELIMITED(C) SYSNAME(XXXXX-XX) SYSLEVEL(XXXX) TIMEZONE(L) DATATYPE(E) EDITYPE(未格式化) SENDERFILE(XXXXXXXXXXXXX) RECFM(????) RECLEN(0) RECDLM(C) UNIQUEID(XXXXXXXX) SYSTYPE(24) SYSVER(5);
注意两个 LENGTH(#####) 字符串。下面的代码设法计算长度字符串出现的次数以及获取最终长度字符串计数(我真正想要的,长度字符串中的数字),但仅当它们位于这两个位置时:
工作存储部分。 01 WS-输入-记录图片 X(80)。 01 WS-字符串。 05 长度字符串 PIC X(7) 值 'LENGTH('. 01 WS-计数器。 05 WS-MSG-COUNT PIC 9(11)。 01 WS-CHAR-TOTALS。 05 CHAR-TOTAL PIC 9(11) 值为零。 05 TMP-TOTAL PIC X(11) 值为零。 …… 程序部。 2200-获取-味精-总计。 检查 WS-INPUT-RECORD 统计所有长度字符串的 WS-MSG-COUNT。 2300-CHAR-TOTAL。 如果 WS-INPUT-RECORD(1:7) = 长度字符串 将 WS-INPUT-RECORD(8:9) 移动到 TMP-TOTAL UNSTRING TMP-TOTAL 由 ')' 分隔 INTO CHAR-TOTAL 万一 如果 WS-INPUT-RECORD(61:7) = 长度字符串 将 WS-INPUT-RECORD(68:9) 移动到 TMP-TOTAL UNSTRING TMP-TOTAL 由 ')' 分隔 INTO CHAR-TOTAL 万一
该代码适用于上面示例输入中显示的两个位置。但如果 LENGTH(####) 以任何其他字节位置结束,它将不起作用。除了编写 80 个 IF 语句来检查文件中每个字节的字符串之外,还有没有更简单的方法可以在长度括号内获取这些值?我检查了很多其他帖子,并考虑过使用指针或表格,但我似乎不太明白。