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)
它似乎工作正常,但我想知道你是否有更好,更简单或更清晰的方法来做到这一点.
您应该使用所有空白的输入来测试您的代码.
如果您完全确定数据的质量,无论是否检查空白,您都可以这样做:
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(有时候是"传统主义者"首选,但最不清楚的是).
具体如何操作取决于您的数据.如果您需要验证数据,首先需要代码,这将使您更清楚地选择.如果您的数据有保证,干净,那么......
我知道这只是一个例子,但我希望你使用更好的数据名称.