读取cobol中的空格分隔数字

时间:2014-09-28 11:16:50

标签: cobol

我正在尝试使用COBOL解决几何问题。这个问题要求我读取空格分隔的整数(其中6个代表3点的x和y坐标)。现在,当我尝试使用ACCEPT读取它们时,问题出现了。使用空格作为分隔符不会读取数字。我正在使用这个

ACCEPT AX
ACCEPT AY
ACCEPT BX
ACCEPT BY1
ACCEPT X
ACCEPT Y
DISPLAY AX
DISPLAY AY 

当我输入的时候 1 2 2 1 2 2

AX包含000012212 和AY包含000000000。

所有变量的长度均为9.

DATA-DIVISION

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 TP       PIC X(126).
   01 AX       PIC S9(20).
   01 AY       PIC S9(20).
   01 BX       PIC S9(20).
   01 BY1      PIC S9(20).
   01 X        PIC S9(20).
   01 Y        PIC S9(20).
   01 T        PIC S9(5).
   01 ABC      PIC S9(36).
   01 ABD      PIC S9(36).
   01 CDA      PIC S9(36).
   01 CDB      PIC S9(36).

这是我接受坐标字符串的部分。

  ACCEPT TP.
  DISPLAY TP
  UNSTRING TP
  DELIMITED BY ALL SPACE
  INTO AX
       AY
       BX
       BY1
       X
       Y

2 个答案:

答案 0 :(得分:0)

我建议您接受1变量的所有输入,然后使用PERFORM UNTIL构造将其分解以使所有数字正确。

答案 1 :(得分:0)

如果您需要使用ACCEPT,请使用UNSTRING将数据分成字段,然后验证这些:

01  INPUT-COORDS PIC X(12).

01  XY-COORDS.
    05  X-COORD-1 PIC 9.
    05  Y-COORD-1 PIC 9.
    05  X-COORD-2 PIC 9.
    05  Y-COORD-2 PIC 9.
    05  X-COORD-3 PIC 9.
    05  Y-COORD-3 PIC 9.

ACCEPT INPUT-COORDS
MOVE SPACE TO XY-COORDS
UNSTRING INPUT-COORDS
  DELIMITED BY ALL SPACE
  INTO X-COORD-1
       Y-COORD-1
       X-COORD-2
       Y-COORD-2
       X-COORD-3
       Y-COORD-3
  ON OVERFLOW
     do something meaningful
END-UNSTRING

然后验证这样提取的数据。

IF X-COORD-1 NOT NUMERIC, etc

我没有检查你的输入数据。只有一位数的坐标有效,你也可以考虑这个:

01  XY-COORDS.
    05  X-COORD-1 PIC 9.
    05  FILLER    PIC X.
        88  XYC-SEP1-OK VALUE SPACE.  
    05  Y-COORD-1 PIC 9.
    05  FILLER    PIC X.
        88  XYC-SEP2-OK VALUE SPACE.  
    05  X-COORD-2 PIC 9.
    05  FILLER    PIC X.
        88  XYC-SEP3-OK VALUE SPACE.  
    05  Y-COORD-2 PIC 9.
    05  FILLER    PIC X.
        88  XYC-SEP4-OK VALUE SPACE.  
    05  X-COORD-3 PIC 9.
    05  FILLER    PIC X.
        88  XYC-SEP5-OK VALUE SPACE.  
    05  Y-COORD-3 PIC 9.

ACCEPT XY-COORDS

然后进行与上面相同的验证,并检查分隔符是否为每个空格(使用88s)。