首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNUCobol编译的程序比预期多了一条记录

GNUCobol编译的程序比预期多了一条记录
EN

Stack Overflow用户
提问于 2017-12-17 19:48:08
回答 1查看 140关注 0票数 1

我正在学习COBOL编程,并使用GNUCobol (在Linux上)编译和测试一些简单的程序。在其中一个程序中,我发现了一种我不理解的意外行为:当读取记录的顺序文件时,我总是得到一条额外的记录,当将这些记录写入报告时,最后一条记录是重复的。

我做了一个非常简单的程序来重现这个行为。在本例中,我有一个文本文件,其中只有一行文本:"0123456789“。程序应该计算文件中的字符数(或1个字符的长记录),我希望它会显示"10“,但我得到的结果是"11”。

此外,在读取记录时,显示记录时,我会得到以下输出:

代码语言:javascript
复制
0
1
2
3
4
5
6
7
8
9


11

(9和11之间有两个空格)。

这是本程序的相关部分:

代码语言:javascript
复制
FD SIMPLE.
01 SIMPLE-RECORD.
    05 SMP-NUMBER PIC 9(1).

[...]
PROCEDURE DIVISION.

000-COUNT-RECORDS.
    OPEN INPUT SIMPLE.
    PERFORM UNTIL SIMPLE-EOF
        READ SIMPLE
            AT END
                SET SIMPLE-EOF TO TRUE
            NOT AT END
                DISPLAY SMP-NUMBER
                ADD 1 TO RECORD-COUNT
        END-READ
    END-PERFORM

    DISPLAY RECORD-COUNT.
    CLOSE SIMPLE.
    STOP RUN.

我使用编译器的默认选项,并尝试使用'WITH TEST { the |AFTER}‘,但结果是相同的。导致这种行为的原因是什么,或者我如何才能获得预期的结果?

编辑:我尝试使用一个“空”文件作为数据源,期望记录计数为0,使用两种不同的方法清空文件:

代码语言:javascript
复制
$ echo "" > SIMPLE

这样,记录计数为1 (ls -l给出的文件大小为1字节)。

代码语言:javascript
复制
$ rm SIMPLE
$ touch SIMPLE

这样,记录计数为0 (ls -l给出的文件大小为0字节)。所以我猜,不知何故,编译的程序正在检测一个额外的字符,但我不知道如何避免这种情况。

EN

回答 1

Stack Overflow用户

发布于 2017-12-18 03:28:58

我发现这种行为的原因是vim在保存数据文件时似乎会自动添加换行符。

以这种方式在vim中禁用此功能后

代码语言:javascript
复制
:set binary
:set noeol

该程序按预期运行。

编辑:当使用从文本编辑器创建的数据文件时,一种更优雅的方法是在SELECT子句中使用ORGANIZATION IS LINE SEQUENTIAL

既然问题是由数据格式引起的,我应该删除这个问题吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47854787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档