以COBOL格式输出带有子标题的报告

以COBOL格式输出带有子标题的报告,cobol,gnucobol,Cobol,Gnucobol,输入文件的格式如下: Region ******* Company Name A B C A C Company in Region A: name name name... Company in Region B: name name name.. Company in Region C: name name

输入文件的格式如下:

Region  ******* Company Name  
  A               
  B            
  C            
  A          
  C      
Company in Region A:  
name  
name  
name...  

Company in Region B:  
name  
name  
name..  

Company in Region C:  
name  
name  
name..  
有很多行。
我需要获得一个输出文件,以使用如下标题重新排列文件:

Region  ******* Company Name  
  A               
  B            
  C            
  A          
  C      
Company in Region A:  
name  
name  
name...  

Company in Region B:  
name  
name  
name..  

Company in Region C:  
name  
name  
name..  

我的问题是因为输入文件中的区域没有排序。如何将第二个区域A公司添加回标题“区域A中的公司”?我只能读取该文件一次(我无法先读取区域A的所有do行,然后重新打开该文件以再次读取)。我只能有一个输出文件。

您应该在文件的一次传递中完成此操作。不要一次只检查一个项目,而是在一个过程中检查所有项目…

您应该在文件的一个过程中执行此操作。不要一次只检查一个项目,而是一次检查所有项目…

您可以使用带有输入/输出过程的排序动词将文件按区域顺序排序

您可以在中找到许多示例。有一个简短的排序示例, 还有更多信息 您可能需要和输出过程

排序示例:

PROCEDURE DIVISION. 
000-SORT SECTION. 
010-DO-THE-SORT. 
    SORT SORT-FILE ON ASCENDING KEY SORT-KEY-1 
                   ON DESCENDING KEY SORT-KEY-2 
                   USING INPUT-FILE 
                   OUTPUT PROCEDURE IS 200-WRITE-OUTPUT 
                                  THRU 230-DONE-OUTPUT. 
    DISPLAY "END OF SORT". 
    STOP RUN. 
200-WRITE-OUTPUT SECTION. 
210-OPEN-OUTPUT. 
    OPEN OUTPUT OUTPUT-FILE. 
220-GET-SORTED-RECORDS. 
    RETURN SORT-FILE AT END 
        CLOSE OUTPUT-FILE 
        GO TO 230-DONE-OUTPUT. 
    MOVE SORT-RECORD TO OUTPUT-RECORD. 
    WRITE OUTPUT-RECORD. 
    GO TO 220-GET-SORTED-RECORDS. 
230-DONE-OUTPUT SECTION. 
240-EXIT-OUTPUT. 
    EXIT. 

您可以将Sort动词与输入/输出过程一起使用,将文件按区域顺序排序

您可以在中找到许多示例。有一个简短的排序示例, 还有更多信息 您可能需要和输出过程

排序示例:

PROCEDURE DIVISION. 
000-SORT SECTION. 
010-DO-THE-SORT. 
    SORT SORT-FILE ON ASCENDING KEY SORT-KEY-1 
                   ON DESCENDING KEY SORT-KEY-2 
                   USING INPUT-FILE 
                   OUTPUT PROCEDURE IS 200-WRITE-OUTPUT 
                                  THRU 230-DONE-OUTPUT. 
    DISPLAY "END OF SORT". 
    STOP RUN. 
200-WRITE-OUTPUT SECTION. 
210-OPEN-OUTPUT. 
    OPEN OUTPUT OUTPUT-FILE. 
220-GET-SORTED-RECORDS. 
    RETURN SORT-FILE AT END 
        CLOSE OUTPUT-FILE 
        GO TO 230-DONE-OUTPUT. 
    MOVE SORT-RECORD TO OUTPUT-RECORD. 
    WRITE OUTPUT-RECORD. 
    GO TO 220-GET-SORTED-RECORDS. 
230-DONE-OUTPUT SECTION. 
240-EXIT-OUTPUT. 
    EXIT. 

如果你在做作业,记住作业的目的不是解决问题,而是证明你已经学会了课堂材料。所以,如果这是家庭作业,根据你所学的内容,创建你自己的解决方案。如果你想解决现实生活中的问题,下面的例子可能会帮助你找到正确的方向。如果您没有被教导使用输出过程进行排序,则不希望使用下面的示例来做家庭作业。也就是说,下面的程序使用GNUCobol显示的示例数据工作。请特别注意排序如何使用段落OUTPUT-CO-BY-REGION-REPORT

---样本数据文件COMPANY.DAT的内容---



如果你在做作业,记住作业的目的不是解决问题,而是证明你已经学会了课堂材料。所以,如果这是家庭作业,根据你所学的内容,创建你自己的解决方案。如果你想解决现实生活中的问题,下面的例子可能会帮助你找到正确的方向。如果您没有被教导使用输出过程进行排序,则不希望使用下面的示例来做家庭作业。也就是说,下面的程序使用GNUCobol显示的示例数据工作。请特别注意排序如何使用段落OUTPUT-CO-BY-REGION-REPORT

---样本数据文件COMPANY.DAT的内容---



这是家庭作业吗?如果没有,您指定限制的原因是什么?即使在“允许”的情况下,您也应该强烈地不考虑多次打开和关闭文件。对于家庭作业,Bruce给出了答案(排序),不过他举了一个来自HP/Compaq的悲惨例子:-),所以你可以做一个好的。如果不是家庭作业,请更全面地描述你的局限性。此评论仅供参考,仅与问题无关。当您将其标记为opencobol时,请查看SourceForge上的reportwriter分支。报表编写器模块是一个功能强大的模块。这是家庭作业吗?如果没有,您指定限制的原因是什么?即使在“允许”的情况下,您也应该强烈地不考虑多次打开和关闭文件。对于家庭作业,Bruce给出了答案(排序),不过他举了一个来自HP/Compaq的悲惨例子:-),所以你可以做一个好的。如果不是家庭作业,请更全面地描述你的局限性。此评论仅供参考,仅与问题无关。当您将其标记为opencobol时,请查看SourceForge上的reportwriter分支。报表编写器模块是一个功能强大的模块,是一个更好的例子。我知道你知道文件状态。您是否对
返回
尝试过相同的技巧,以避免在结尾/不在结尾时出现丑陋的
?您缺少
结束返回
,可能是结束返回终止了它?我得考虑一下:-)一个更好的例子。我知道你知道文件状态。您是否对
返回
尝试过相同的技巧,以避免在结尾/不在结尾时出现丑陋的
?您缺少
结束返回
,可能是结束返回终止了它?我得考虑一下:——)