COBOL:简单的文件读取问题

COBOL:简单的文件读取问题,cobol,gnucobol,Cobol,Gnucobol,我有一个非常基本的COBOL程序,它读取一个文件input.dat,然后在控制台中简单地输出它。input.dat文件如下所示: John Johnson Peter Peterson Juliette Julietteson Natasha Natashason Justin J

我有一个非常基本的COBOL程序,它读取一个文件
input.dat
,然后在控制台中简单地输出它。
input.dat
文件如下所示:

John                Johnson             
Peter               Peterson            
Juliette            Julietteson         
Natasha             Natashason          
Justin              Justinson           
John                Johnson             
Peter               Peterson            
Juliette            Julietteson         
Natasha             Natashason          
Justin              Justinson           
ustin              Justinson       
此处显示不正确,但我确信名字有
20个字符
,姓氏有
20个字符

这是我的COBOL程序:

    IDENTIFICATION DIVISION.
    PROGRAM-ID. ATEST4.
    ENVIRONMENT DIVISION.
    INPUT-OUTPUT SECTION.
    FILE-CONTROL.
        SELECT INPUTFILE ASSIGN TO "files/input.dat".
    DATA DIVISION.
        FILE SECTION.
            FD INPUTFILE
                LABEL RECORDS ARE OMITTED.
            01 INPUTRECORD PIC X(40).    
        WORKING-STORAGE SECTION.
            01 FILE-STATUS PIC 9 VALUE 0.
    PROCEDURE DIVISION.
        001-MAIN.
            OPEN INPUT INPUTFILE.
            PERFORM 002-READ UNTIL FILE-STATUS = 1.
            CLOSE INPUTFILE.
            STOP RUN.

       002-READ.
            READ INPUTFILE
                AT END MOVE 1 TO FILE-STATUS
                NOT AT END DISPLAY INPUTRECORD
            END-READ.  
相反,输出如下所示:

John                Johnson             
Peter               Peterson            
Juliette            Julietteson         
Natasha             Natashason          
Justin              Justinson           
John                Johnson             
Peter               Peterson            
Juliette            Julietteson         
Natasha             Natashason          
Justin              Justinson           
ustin              Justinson       
最后一行似乎是前一行的副本,缺少第一个字符和几个较少的尾随空格(总计为
35个字符

为什么会发生这种情况?这似乎是对末尾的
子句的误解,但我无法回避

编辑:根据建议更新编译器。还是一样的结果。
这里是我的链接,如果有帮助的话

好的,错过了一个技巧。一两个。您正在使用40字节的固定长度记录。当您使用固定长度的记录时,与行顺序记录不同,读取时不存在单个尾随null剥离,写入时不存在null追加

我还粘贴了问题中的数据,它以40字节记录(包括空记录分隔符)的形式到达我的面前

现在我有了你的真实数据

不是5条40字节的记录,而是5条41字节的记录。如果你认为这是一组数据,COBOL程序一次读取40个字节,那就给你五个40字节的记录,一个是五。 如果不向记录追加null,我应该将所有输出数据视为一条长线。但我没有。为什么?

这一次,对于“long”记录,除第一条记录外,所有记录上都有null的前导记录分隔符

以下是一些数据供您测试:

John                Johnson   0123456789
Peter               Peterson  0123456789
Juliette            Julietteson123456789
Natasha             Natashason0123456789
Justin              Justinson 0123456789
1234511111111111111111111111111111111110
这意味着每个记录有40字节的数据,后跟一个空记录终止符

这是您修改后的程序,用于编译和运行数据。我使用了`cobc-x-free prog.cob,而不是在粘贴问题后修复列(从SO粘贴对COBOL来说并不好)。而且因为它被破坏了,所以我没有太多注意我把新东西塞进了什么地方


“>”的要点和“我不熟悉opencobol,但我记得的cobol写入从工作存储中获取了,而不是输入文件描述。@GilbertLeBlanc我也使用了这种方法,但输出是same@GilbertLeBlanc我还删除了写入部分,输出到控制台会产生相同的结果。。也许我需要在文件上添加一些EOF标记??如果您确实有OpenCOBOL,您应该升级到GnuCOBOL(OpenCOBOL的新名称)。OpenCOBOL不再作为OpenCOBOL维护,因此您有一个旧的编译器。如果您得到的是这个结果,那么您所显示的代码(最新编辑,第5版)就不会得到这个结果,因为它甚至不会编译。@BillWoodger我拥有cobc(OpenCOBOL)1.1.0版权(C)2001-2009 Keisuke Nishida/Roger While。想详细解释一下为什么它无法编译吗?现在更新。不同意,因为数据问题不是问题的初始条件。不同意什么?如果唯一的问题是数据,那么这个问题就离题了。因为这不是唯一的问题,问题是关于主题的。或者你是说数据是正常的,在这种情况下,问题不能用GnuCOBOL重现。我是说程序所期望的数据的正确结构在主题上。即使逻辑正确,我也输入了一种意想不到的格式。如果你必须的话,解释为什么它不属于编程网站。如果你把测试日期搞砸了,你应该能够自己解决。它不会帮助任何其他人(他们不会有你的数据)。修复数据,没有编程问题。这和打字错误是一样的。如果你想确认这一点(当然,我可能错了),你可以在元站点上提问(从你的个人资料中,选择元图标)。我以前曾投票结束关于数据输入错误的问题。我希望,如果您的数据显示完全混乱,您会查看您的文件并修复错误。只是在这种情况下,似乎发生了一些错误。我们的想法不同,仅此而已。另一方面:我对另一个答案投了反对票,因为它的质量很差,没有别的。仅仅发布代码对任何人都没有帮助,特别是如果更改看起来微不足道,并且你没有解释为什么要重新发布代码(例如,你对88个值的评论所包含的信息要比他的答案多得多)。