如何在cobol中将数字的最后一位移到第一位

如何在cobol中将数字的最后一位移到第一位,cobol,Cobol,假设我的号码是123456,如何将6移到开头,使其成为612345 如果数字的位数较少,如123变为312,则需要工作 非常感谢。这是一种通用方法,适用于2到32位之间的任何整数。号码必须是用法显示 working-storage section. 1 a-number pic 9(6) value 123456. 1 b-number pic 9(3) value 123. 1 work pic x(32). 1 len-of-number binary pic

假设我的号码是123456,如何将6移到开头,使其成为612345

如果数字的位数较少,如123变为312,则需要工作


非常感谢。

这是一种通用方法,适用于2到32位之间的任何整数。号码必须是
用法显示

   working-storage section.
   1 a-number pic 9(6) value 123456.
   1 b-number pic 9(3) value 123.
   1 work pic x(32).
   1 len-of-number binary pic 9(4).
   procedure division.
   begin.
       display a-number
       move a-number (1:) to work
       perform swap-digit
       move work to a-number (1:)
       display a-number
       display space
       display b-number
       move b-number (1:) to work
       perform swap-digit
       move work to b-number (1:)
       display b-number
       stop run
       .
   swap-digit.
       move 0 to len-of-number
       inspect work tallying
           len-of-number for characters before space
       move function reverse (work (1:len-of-number))
           to work
       move function reverse (work (2:len-of-number - 1))
           to work (2:len-of-number - 1)
       .
输出:

123456
612345

123
312

这就是解决办法。只需将您的输入移动到
VAR-input
。它是一个字母数字的picture子句,但这并不重要,因为您需要一个字符串作为输出

我还选择了随机图片子句长度,你可以选择你想要的任何长度

 WORKING-STORAGE SECTION.

           01  VAR-INPUT    PIC X(20).
           01  VAR1         PIC X(10).
           01  VAR2         PIC X(10).
           01  RESULT       PIC X(20).
           01  L            PIC 9(02).
           01  OFFSET       PIC 9(02).

 PROCEDURE DIVISION.

               COMPUTE L      = LENGTH OF VAR-INPUT
               COMPUTE OFFSET = L - 1

               MOVE VAR-INPUT(1:L)      TO VAR1
               MOVE VAR-INPUT(OFFSET:1) TO VAR2

               STRING VAR1 DELIMITED BY SPACE
                      VAR2 DELIMITED BY SPACE
               INTO   RESULT

下面是一个来自OpenCobolIDE的工作示例

   IDENTIFICATION DIVISION.
   PROGRAM-ID. YOUR-PROGRAM-NAME.
   DATA DIVISION.
   FILE SECTION.

   WORKING-STORAGE SECTION.
    01 A PIC X(37).
    01 B PIC 9(2).
    01 C PIC X(1).
    01 D PIC 9(2).
    01 E PIC 9(2).

   PROCEDURE DIVISION.
      ACCEPT A.
      INSPECT A TALLYING B FOR CHARACTERS BEFORE SPACE.
      MOVE A(B:) TO C.

      PERFORM VARYING D FROM B BY -1 UNTIL D = 1
         MOVE D TO E
         SUBTRACT 1 FROM E
         MOVE A(E:1) TO A(D:1) 
      END-PERFORM.

      MOVE C TO A(1:1).
      DISPLAY A.
   END PROGRAM YOUR-PROGRAM-NAME.

在执行循环中插入一个显示a,以查看工作流的运行情况。

这需要更多详细信息,picture子句是什么,并且该行将在大多数编译器中导致语法错误。我将在一段时间内编写完整的工作程序,测试并编辑我的答案:)这将不起作用VAR1和VAR2都是PIC X(10)所以当你把它们串在一起,按大小分隔时,你会得到6,9个空格12345,而不是612345,我必须使用空格分隔。或者让VAR1成为picx(01),假设他总是想要最后一个数字(而不是多个数字)欢迎来到这里。请重新检查本教程,了解要问什么问题,以及如何编写问题,以显示您下次尝试的内容。谢谢。我很抱歉,西蒙。这个解决方案有效,但我不明白您在哪里指定要转换的数字。请您澄清一下好吗?@JoãoMateus没有指定数字,但是操作员用最简单的格式输入了“任何数据”。是的。您可以省略ACCEPT A,而是在执行代码之前将数据移动到A(最好使用单独的方法)。