首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RPGLE递增计数器进入数据结构

RPGLE递增计数器进入数据结构
EN

Stack Overflow用户
提问于 2021-11-04 17:25:14
回答 2查看 85关注 0票数 2

我正在尝试在我的程序中实现一个计数器,它将在记录的末尾给出一个总数。目前,我在一个名为TotalCalls += 1;的过程中有一个计数器,它对工作正常的调用进行计数,并且在我的打印文件中有一个Totals字段,我需要将它移到其中。问题是我有一个数据结构Dcl-ds PrinterTotalDS likeRec(PrinterFile.Totals:*output);,我需要将计数器数据移入其中,然后将其写入打印文件。我目前使用这个作为write:Write PrinterFile.Totals PrinterTotalDS;,但是什么也没有显示。当我调试程序时,计数器可以工作,但不会将任何内容移动到写入总计。下面是完整的代码:任何帮助都非常感谢!

代码语言:javascript
复制
/Copy IMPWR126/QRPGLESRC,S071303CPY

Dcl-F PrinterFile PRINTER Qualified Alias ExtFile(*extdesc) OfLind(EndOfPage) USROPN
                     ExtDesc('S071303P');

Dcl-F S071303LF Keyed;

Dcl-s EndofPage ind inz(*on);
Dcl-s DateConv Date;
Dcl-s TimeConv Time;
Dcl-s Tempstring Char(25);
Dcl-s DayofWk Char(15);
Dcl-s InputDate Zoned(8:0);
Dcl-s TotalCalls Zoned(5:0);

Dcl-ds PrinterHeadDS likeRec(PrinterFile.Header:*output);
Dcl-ds OutputDS likeRec(PrinterFile.Detail:*output);
Dcl-ds InputDS likeRec(CALLREC);

Dcl-Proc Driver;
  Dcl-Pi *N;
      CALDAT Zoned(8:0);
  END-PI;

  Dcl-ds PrinterTotalDS likeRec(PrinterFile.Totals:*output);

  Open PrinterFile;

  Clear InputDS;
  Read S071303LF InputDS;
  Clear OutputDS;

  DOW not %eof(S071303LF);
    TotalCalls += 1;
    MoveDS();
    Eval-Corr OutputDS = InputDS;
    IF EndofPage;
      EndOfPage = *off;
      Write PrinterFile.Header PrinterHeadDS;
    ENDIF;
    Write PrinterFile.Detail OutputDS;
    Read S071303LF InputDS;
    Clear OutputDS;
  Enddo;
  TotalCalls = %dec('0' + %trim(PrinterTotalDS):5:0);
  Write PrinterFile.Totals PrinterTotalDS;
  close S071303LF;
  close PrinterFile;
  return;
END-PROC Driver;

Dcl-Proc MoveDS;
    OutputDS.DateConv = CONVDATE(InputDS.CALDAT);
    OutputDS.TimeConv = CONVTIME(InputDS.CALTIM);
    TempString = InputDS.CFNAME;
    OutputDS.FirstName = PROPCASE(TempString);
    TempString = InputDS.CLNAME;
    OutputDS.LastName = PROPCASE(TempString);
    OutputDS.DayofWk = GetDayofWeek(InputDS.CalDat);
End-Proc;
EN

回答 2

Stack Overflow用户

发布于 2021-11-04 21:28:29

你的问题就在这里:

代码语言:javascript
复制
  TotalCalls = %dec('0' + %trim(PrinterTotalDS):5:0);

您正在使用PrinterTotalDS中的一些值覆盖TotalCalls。我甚至不确定为什么要对前导为0的数据结构进行修剪,并将其转换为小数,但这与实际问题并不相关。

相反,我认为你想要这样的东西:

代码语言:javascript
复制
PrinterTotalDS.MyOutputField = TotalCalls;
Write PrinterFile.Totals PrinterTotalDS;
票数 2
EN

Stack Overflow用户

发布于 2021-11-05 13:08:12

我认为您可以在PrinterTotalDS中使用计数器,而不是使用单独的TotalCalls字段。

但请确保将INZ关键字添加到PrinterTotalDS的定义中。

(初始化所有数据结构是一个好主意。在有些奇怪的默认情况下,数据结构被初始化为空格,这意味着大多数子字段都被初始化为无效值。)

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

https://stackoverflow.com/questions/69843391

复制
相关文章

相似问题

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