当前位置: 首页 > 知识库问答 >
问题:

COBOL读取顺序行文件,计数字符

邢昂然
2023-03-14

在COBOL中,我从顺序行文件中读取。一行行,到EOF,诸如此类的

           read bank-file  at end
            move 'Y'  to end-of-bank

行的长度从40到80个字符不等。我需要知道,每行有多少个字符。但是行可以以一些空格结束,我也需要计算。所以我不能在程序中从变量取字符串的长度。READ语句是否有返回值,它返回已读行的字符数(直到达到CRLF)?

共有1个答案

扈昀
2023-03-14

正如注释中提到的,实际上可以读取字符(字节数),实际上记录根据子句而变化:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

    SELECT SOME-FILE
        ASSIGN TO "someFile.txt"
        ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.

FD SOME-FILE
    RECORD VARYING 40 TO 80 DEPENDING ON SOME-LINE-LENGTH.

 01 SOME-LINE PIC X(80).

WORKING-STORAGE SECTION.

 77 SOME-LINE-LENGTH PIC 9(3).

现在,对于每次读取,记录长度存储到some-line-length:

READ SOME-FILE NEXT RECORD
DISPLAY SOME-LINE-LENGTH

我不知道到底哪些供应商支持它(可能几乎所有),但至少它可以与Acucobol一起工作。

据我所知,对于执行read语句读取的字节数没有反馈。显然,字节会立即存储到文件节中的文件描述符所描述的记录中。

但是,可以通过计算写入记录的字符数来计算读取的字节数。
首先,将文件记录初始化为low-values。然后读下一条记录;这将移动读取到记录的字节数。当读取的字节数小于记录大小时,记录末尾的字节保持不变。

MOVE LOW-VALUES TO YOUR-RECORD
READ YOUR-FILE NEXT RECORD
PERFORM VARYING SOME-COUNTER FROM 72 BY -1 UNTIL (SOME-COUNTER < 0)
    IF NOT (YOUR-RECORD(SOME-COUNTER : 1) = LOW-VALUES)
        EXIT PERFORM
    END-IF
END-PERFORM

some-counter将包含行长,假设文件中没有NUL值。

 类似资料:
  • 问题内容: 我实现了一个小的IO类,它可以从不同磁盘(例如,两个包含相同文件的硬盘)上的多个相同文件中读取数据。在顺序情况下,两个磁盘在文件上的平均读取速度均为60MB / s,但是当我进行交错操作(例如4k磁盘1、4k磁盘2然后合并)时,有效读取速度会降低到40MB / s而不是增加吗? 上下文:Win 7 + JDK 7b70、2GB RAM,2.2GB测试文件。基本上,我尝试以穷人的方式模仿

  • 我有一个COBOL程序,它生成具有以下结构的顺序文件: 如果我在记事本++中打开该文件,我会看到奇怪的unicode符号,这些符号是由变量引起的,很难读取。类似于下面图像的内容(图像来自另一个文件): 有没有办法不使用COBOL重写这个顺序文件以使其可读?也许使用像VBS这样的脚本语言?任何提示或建议将被感谢,如果你需要更多的信息让我知道,我会编辑的帖子。

  • 问题内容: 我有一个Java ee应用程序,在该应用程序中,我使用servlet来打印使用log4j创建的日志文件。在读取日志文件时,通常会寻找最后一个日志行,因此,如果servlet以相反的顺序打印日志文件,则它会更加有用。我的实际代码是: 我在互联网上找到的实现涉及使用StringBuffer并在打印之前加载所有文件,难道没有找到找到文件结尾并读取内容直到文件开头的代码轻巧的方式吗? 问题答案

  • 问题内容: 我有一个顺序文件,它是hadoop map- reduce作业的输出。在此文件中,数据以键值对的形式写入,而值本身是一个映射。我想将值读取为MAP对象,以便我可以进一步处理它。 程序输出:关键是:[this is key]值是:{abc = 839177,xyz = 548498,lmn = 2,pqr = 1} 在这里,我以字符串的形式获取值,但我希望将其作为map的对象。 问题答案

  • 我在标准Spring Boot应用程序的resources文件夹下有以下文件。Spring忙碌的profile设置为dev,属性文件的读取顺序是什么。?

  • 为了在需要的时候能够检索要处理的数据,数据要存储在文件中。上一节演示丁怎样建立一个顺序访问的文件。这一节要讨论按顺序读取文件中的数据。 图14.7 中的程序读取文件"clients.dat"(图14.4中的程序建立)中的记录,并打印出了记录的内容。通过建立ifstream类对象打开文件以便输入。向对象传入的两个参数是文件名和文件打开方式。下列声明: ifstream inClientFile( "