我尝试使用单独的字母在Cobol中创建一个字符串。直到我尝试插入一个 空间,一切正常。你有什么想法,我怎么能创建e.x.字符串
" ee ee"
?
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 S1 PIC X(10).
PROCEDURE DIVISION.
MAIN-PARAGRAPH.
Perform InsertSpace 2 Times
Perform InsertE 2 Times
Perform InsertSpace 2 Times
Perform InsertE 2 Times
Display S1
* expectation " ee ee"
End-Main
InsertE Section
STRING S1 DELIMITED BY SPACE
'e' DELIMITED BY SIZE
INTO S1
END-STRING
InsertSpace Section
STRING S1 DELIMITED BY SPACE
' ' DELIMITED BY SIZE
INTO S1
END-STRING
答案 0 :(得分:4)
如果您正在尝试实施一次将一个字符添加到a上的过程 字符变量,然后像下面这样的东西可能会更好一点:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 S1 PIC X(10) VALUE SPACE.
01 S1-SUB PIC S9(4) BINARY VALUE ZERO.
PROCEDURE DIVISION.
PERFORM INSERT-SPACE 2 TIMES
PERFORM INSERT-E 2 TIMES
PERFORM INSERT-SPACE 2 TIMES
PERFORM INSERT-E 2 TIMES
DISPLAY '>' S1 '<'
GOBACK
.
INSERT-SPACE SECTION.
COMPUTE S1-SUB = S1-SUB + 1
MOVE SPACE TO S1 (S1-SUB : 1)
.
INSERT-E SECTION.
COMPUTE S1-SUB = S1-SUB + 1
MOVE 'E' TO S1 (S1-SUB : 1)
.
S1-SUB保持当前字符位置的路径并递增 每次你执行一个部分来添加另一个角色。
上述程序显示:> EE EE <
注意尾随空格?如果您不想要这些,适当的DISPLAY将是:
DISPLAY '>' S1 (1 : S1-SUB) '<'
将显示的长度限制为只有您明确放入变量的字符。 COBOL不支持可变长度字符串,因此您必须声明一些PIC X类型变量,该变量可以保存您想要显示的最大字符数,然后跟踪实际“使用”的数量,并仅显示那么多。
如果这是你要找的东西,我也建议你检查一下 对于边界错误(即添加太多字符)。这可以按如下方式完成:
INSERT-E SECTION.
COMPUTE S1-SUB = S1-SUB + 1
IF S1-SUB > LENGTH OF S1
PERFORM ERROR-ROUTINE
END-IF
MOVE 'E' TO S1 (S1-SUB : 1)
.
答案 1 :(得分:3)
MOVE " ee ee" TO S1
这将做你想要的。
很难确定,因为你没有显示你得到的结果,而且不清楚是什么&#34;在我尝试插入空间之前,一切正常并且#34;意思是,但......
01 S1 PIC X(10) VALUE SPACE.
如果S1没有VALUE(假设您没有使用为PICture设置默认值的编译器),DELIMITED BY SPACE
将占用整个10个字节,STRING添加的值永远不会出现在S1中,除非它以SPACE值开头。凭借SPACE的价值,您的四个STRING应该有效。呃......不是因为太空而没有赢得,而且是空间的贬低。
您当然也可以使用引用修改:
MOVE " " TO S1 ( 1 : 2 )
MOVE "ee" TO S1 ( 3 : 2 )
MOVE " " TO S1 ( 3 : 2 )
MOVE "ee" TO S1 ( 5 : )
或者,如果您不想默认将字段的最后部分填充到SPACE,请将最后一部分更改为(5:2),这将使S1的字节9和10保持不变。
如果你能澄清你想要达到的目标,以及为什么你认为STRING是用来做这件事的动词,你可能会得到更好的答案。