如何将右边的空格替换为COBOL左边的零?

har*_*on4 2 optimization cobol

我有一个长度为10的字母数字变量.它在开头包含一个数字,其余的数字用空格填充.然后我需要将字符串向左移动并在开头放置'0'的空格数.这个例子说明了一切:

INPUT            OUTPUT
==============================
'123456    ' ->  '0000123456'
'12345678  ' ->  '0012345678'
'123456789 ' ->  '0123456789'
'1234567890' ->  '1234567890'
Run Code Online (Sandbox Code Playgroud)

然后我买了这样的东西:

检查这个COBOL小提琴你可以尝试:http://ideone.com/mgbKZ3(只需点击编辑)

   IDENTIFICATION DIVISION.
   PROGRAM-ID. VARSWAP.
   ENVIRONMENT DIVISION.
   DATA DIVISION.
   WORKING-STORAGE SECTION. 

       01 VARIN   PIC X(10).
       01 VARSWAP PIC X(10) JUSTIFIED RIGHT.

   PROCEDURE DIVISION.

       MOVE '123456    ' TO VARIN

       UNSTRING VARIN DELIMITED BY ' ' INTO VARSWAP

       INSPECT VARSWAP REPLACING LEADING SPACE BY '0'

       MOVE VARSWAP TO VARIN

       DISPLAY VARIN

       STOP RUN.
Run Code Online (Sandbox Code Playgroud)

返回:

0000123456
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但我想知道你是否有更好,更简单或更清晰的方法来做到这一点.

Bil*_*ger 8

您应该使用所有空白的输入来测试您的代码.

如果您完全确定数据的质量,无论是否检查空白,您都可以这样做:

   ID DIVISION.
   PROGRAM-ID. VARSWAP.
   DATA DIVISION.
   WORKING-STORAGE SECTION. 

       01 VARIN   PIC X(10).
          88  NO-VARIN-PRESENT VALUE SPACE.
       01 VARSWAP PIC 9(10).

   PROCEDURE DIVISION.

       MOVE '123456    ' TO VARIN
       IF NO-VARIN-PRESENT
           do what your spec says
       ELSE
           UNSTRING VARIN DELIMITED BY ' ' INTO VARSWAP
       END-IF

       DISPLAY VARSWAP

      GOBACK
      .
Run Code Online (Sandbox Code Playgroud)

我不喜欢破坏输入,所以我改变了.

一种流行的方法是,FUNCTION REVERSE(你的领域),然后是INSPECT反向领域TALLYING ......用于领先空间.您可以在程序的早期使用FUNCTION LENGTH来确定字段的长度(并确保它们的长度相同)然后,首先将VARIN设置为ZERO,对源和目标使用引用修改 - 源将是( 1:计算的数据长度)目标将是(计算 - 右对齐开始:)(未指定长度使用字段的剩余部分).

还有可变长度字段,逐字节MOVE(有时候是"传统主义者"首选,但最不清楚的是).

具体如何操作取决于您的数据.如果您需要验证数据,首先需要代码,这将使您更清楚地选择.如果您的数据有保证,干净,那么......

我知道这只是一个例子,但我希望你使用更好的数据名称.