如何将空格与字母组合

时间:2014-03-31 17:11:28

标签: cobol

我尝试使用单独的字母在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

2 个答案:

答案 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是用来做这件事的动词,你可能会得到更好的答案。