有没有办法做到这一点?我希望执行仅在执行退出语句时退出。如果不是,我希望它继续循环。
我已经在我的 Ubuntu 17.04 系统上安装了 GnuCOBOL 2.2。我已经编写了一个基本的 hello world 程序来测试编译器。
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. HELLO-WORLD.
3 *---------------------------
4 DATA DIVISION.
5 *---------------------------
6 PROCEDURE DIVISION.
7 DISPLAY 'Hello, world!'.
8 STOP RUN.
Run Code Online (Sandbox Code Playgroud)
该程序名为HelloWorld.cbl。当我用命令编译程序时
cobc HelloWorld.cbl
Run Code Online (Sandbox Code Playgroud)
HelloWorld.so 产生。当我尝试使用运行编译的程序时
cobcrun HelloWorld
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
libcob: entry point 'HelloWorld' not found
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释 GnuCOBOL 中的入口点是什么,并可能提出一种解决问题并成功执行此 COBOL 程序的方法?
基本上,我得到了一个输入文件,该文件也传入了字母数字和数字字段的混合。我的目标是测试每个字段的有效数据。第一个字段是一个带有 Pic X(3) 描述的字母数字,它应该代表一个数字。但是,因为我正在测试数据有效性,所以在某些情况下,该值可能包含一个字母,例如 0R1 或负值 -001。
测试数据时,使用“是数字”测试非常适合查找非数字值。但是,当传入一个负号时,它无法通过测试。我认为这是因为它识别出破折号或负号 (-) 不是数字字符。我的总体目标是测试数字是否既是数字又是正数,但鉴于上述情况,我无法进行正确的测试。
关于如何解决这个问题的任何建议?
谢谢
除了特定的平台和编译器之外,假设您使用报告编写器模块在 COBOL 程序中定义了这一点:
01 CF-MM TYPE CONTROL FOOTING WS-MM.
02 LINE PLUS 1.
03 COLUMN 1 VALUE "* CF MONTH: ".
03 COLUMN PLUS 1 PIC 99 SOURCE WS-MM.
03 S-MM COLUMN PLUS 5 PIC S9(4)V99 SUM WS-TUTION-PAY.
03 VAL-NN COLUMN PLUS 5 PIC S9(4)V99 SOURCE S-MM.
<...>
PROCEDURE DIVISION.
DECLARATIVES.
SEC2 SECTION.
USE BEFORE REPORTING
CF-MM.
DISPLAY "SUM MM LEVEL:" S-MM
.
Run Code Online (Sandbox Code Playgroud)
此外,假设程序报告了 3 行,其中 SUM WS-TUTION-PAY 结果为 126。
SEC2 SECTION 中显示 S-MM 值的语句产生的值是多少?我猜应该是 126,但我显示的是 0。这可能是因为值 126 尚未移动到 S-MM,但我不确定。 …
我想从 GnuCOBOL 调用 Rust。我已经复制了Can GnuCOBOL interface with Rust?中第一个示例的代码。来自 Brian Tiffin 的 GNUCobol FAQ 作为测试,但在运行时出现错误。
预期的:
$ make -B
rustc --crate-type=dylib called.rs
LD_RUN_PATH=. cobc -xj caller.cob -L. -lcalled
:Hello, world:
Run Code Online (Sandbox Code Playgroud)
实际的:
$ make -B
rustc --crate-type=dylib called.rs
LD_RUN_PATH=. cobc -xj caller.cob -L. -lcalled
libcob: error: module 'hello_rust' not found
make: *** [makefile:5: caller] Error 1
Run Code Online (Sandbox Code Playgroud)
从命令行编译这两个文件然后使用$ ./caller.
根据手册页以及GnuCOBOL 手册和Rust 参考cobc的链接部分,语法似乎是正确的。我已经按照 GnuCOBOL 手册中的描述进行了尝试,但没有什么区别。Rust 源代码按预期编译为库,但 COBOL 找不到它。$ ./caller COB_LIBRARY_PATH=.
使用$ cobcrun caller …
我正在运行Ubuntu,并尝试学习COBOL。我涉猎了一些在线教程,但是与某些程序的结果不一致。
我更喜欢在bash shell中使用vim。带我去OpenCOBOL(COBC)
有一个不错的教程可以教我一些基础知识吗?我一直在研究这一过程。
我的问题是,在运行某些示例源代码时,编译器在尝试使用“ *”时返回错误。它说它期望文件结束。
这是我的源代码:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
ENVIRONMENT DIVISION.
*comment here
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY 'HELLO WORLD!'.
STOP RUN.
Run Code Online (Sandbox Code Playgroud)
这是我正在运行的命令:
cobc -x -free -o helloworld helloworld.cbl
Run Code Online (Sandbox Code Playgroud)
这是返回的错误
helloworld.cbl:4: Error: syntax error, unexpected '*', expecting "end of file"
Run Code Online (Sandbox Code Playgroud) 我在Windows 10上使用OpenCobolIDE 4.7.4(它基于GnuCOBOL)并尝试编译该程序打开一个文件进行阅读:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE …Run Code Online (Sandbox Code Playgroud) 我知道string_variable(start:length)可以用来获得给定起点和子串长度的字符串的子串,但是,我发现我经常需要在'start'和'end'点之间得到一个子串.
虽然我知道我总能做到这一点:
SUBTRACT start FROM end GIVING len
string(start:len)
Run Code Online (Sandbox Code Playgroud)
每次我编写经常使用此功能的程序时,必须这样做是很麻烦的.是否有更快/内置的方法来实现这一目标?
这是cobol代码
*-----------------------
IDENTIFICATION DIVISION.
*-----------------------
PROGRAM-ID. TOPACCTS
AUTHOR. Otto B. Boolean.
*--------------------
ENVIRONMENT DIVISION.
*--------------------
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PRINT-LINE ASSIGN TO PRTLINE.
SELECT CUST-RECS ASSIGN TO CUSTRECS.
*-------------
DATA DIVISION.
*-------------
FILE SECTION.
FD PRINT-LINE RECORDING MODE F.
01 PRINT-REC.
05 FILLER PIC X(02) VALUE SPACES.
05 LAST-NAME-O PIC X(25).
05 FILLER PIC X(02) VALUE SPACES.
05 ACCT-BALANCE-O PIC X(18).
05 FILLER PIC X(33) VALUE SPACES.
*
FD CUST-RECS RECORDING MODE F.
01 CUSTOMER-REC.
05 LAST-NAME PIC X(25).
05 …Run Code Online (Sandbox Code Playgroud) 科博程序:
PROGRAM-ID. SCHPROG.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MYFILE ASSIGN TO INDD
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD MYFILE.
01 FILERECORDS.
05 NAME PIC A(10).
05 CLASS-IN PIC 9(1).
05 ROLL PIC 9(5).
WORKING-STORAGE SECTION.
COPY SCHMAPA.
COPY SCHMAPB.
COPY SCHMAPC.
01 END-OF-FILE PIC A(3) VALUE 'NO'.
PROCEDURE DIVISION.
000-MAIN-PARA.
PERFORM 100-SEND-MAPA.
PERFORM 100-RECEIVE-MAPA.
IF CHOICEI = '1'
PERFORM 200-SEND-MAPB
PERFORM 200-RECEIVE-MAPB
PERFORM 200-SEND-MAPB
PERFORM 100-SEND-MAPA
END-IF.
IF CHOICEI = '2'
PERFORM 300-SEND-MAPC …Run Code Online (Sandbox Code Playgroud)