首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不逐个字符移动的COBOL数据缓冲

不逐个字符移动的COBOL数据缓冲
EN

Stack Overflow用户
提问于 2011-05-25 02:30:52
回答 3查看 674关注 0票数 0

我正在读取一个可变长度的输入文件,并希望创建一个输出缓冲区(索引表),它不会逐个字符地使用移动。

例如:我的第一个输入记录是79个字符,然后我可以将其移动到表的组级别。我的第二个输入记录是101个字符--我如何将这101个字符放入我的表中,从位置80开始,长度为101?以及从位置180.....etc开始的下一个输入记录。我们目前执行的是1乘1的变化,但与块移动到起始地址相比,这是令人难以置信的CPU密集型操作。

我们每天这样做数百万次,一个解决方案将是非常有用的。

EN

回答 3

Stack Overflow用户

发布于 2011-05-25 06:36:34

使用来自您的记录的长度的引用修改。考虑一下:

代码语言:javascript
复制
01 Record
  05 Rec-LL  Pic S9(4) Binary.
  05 Rec-Data Pic X(32767).
01 Tgt-Area Pic X(10000000).
01 Curr-Ptr   Pic S9(8) Binary.

一旦你读了你的记录,你就可以像这样根据长度移动:

代码语言:javascript
复制
   Move 1 to Curr-Ptr
   Perform Get-Next-Record
   Perform until no-more-data
      Move Rec-Data (1:Rec-LL) to Tgt-Area (curr-ptr:rec-LL)
      Compute Curr-Ptr = Curr-Ptr + Rec-LL
      Perform Get-Next-Record
   End-Perform
票数 2
EN

Stack Overflow用户

发布于 2011-05-25 18:05:26

或者是老式的方式(我们这里说的是COBOL,非常老式=侏罗纪):-

代码语言:javascript
复制
    01 Record.
       05 REC-LL           PIC S9(4) Binary.
       05 REC-DATA.
          10  REC-BYTES PIC X OCCURS 32767 times depending on REC-LL.

    01 TARGET-AREA.
       05 TARGET-HEADER       PIC X(79).
       05 TARGET-REC          PIC X(101) OCCURS 50 TIMES.

    01 TGT-INDEX              PIC S9(8) BINARY VALUE 1.

   *  Length calculation happens by magic!

       Perform Read-Record.
       move REC-DATA TO TARGET-HEADER.
       perform until no-more-data 
           Perform Read-Record
           move REC-DATA to TARGET-RED(TGT-INDEX)
           add +1 to TGT-INDEX
       end-perform

或者如果记录确实在1到101字节之间变化:

代码语言:javascript
复制
    01 Record.
       05 REC-LL           PIC S9(4) Binary.
       05 REC-DATA.
          10  REC-BYTES PIC X OCCURS 32767 times depending on REC-LL.

    01 TARGET-AREA.
       05 TGT-LL              PIC s9(8) BINARY.
       05 TGT-REC.
          10  TGX-BYTE        OCCURS 3175 depending on TGT-LL.
       05 TGT-EXTRA           PIC X(101). 




       Perform Read-Record.
       Move +0 to tgt-LL.
       perform until no-more-data
           MOVE REC-DATE to TGT-EXTRA
           ADD REC-LL TO TGT-LL
           Perform Read-Record
           add +1 to TGT-INDEX
       end-perform
票数 0
EN

Stack Overflow用户

发布于 2013-01-18 00:57:01

看一看STRING INTO动词,特别是WITH POINTER子句。当像这样把东西串在一起时,不要忘了ON OVERFLOW命令。

有关详细信息,请参阅Gary Cutler's OpenCOBOL Programmer's Guide。

http://opencobol.add1tocobol.com/OpenCOBOL%20Programmers%20Guide.pdf

这是一个世界级的COBOL手册,它是一个开放和免费的文档(GNU FDL)。

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

https://stackoverflow.com/questions/6115109

复制
相关文章

相似问题

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