1

我正在尝试搜索表,但它一直异常。我对 COBOL 很陌生,我不确定我是否只是犯了一个简单的错误。当我尝试调试时,看起来教区代码匹配,所以我不确定为什么它不输出领土代码。下面是这个例程的说明和我的代码,以防万一。我知道我错过了很多(比如计数),但我只是想先得到一些输出。任何帮助,将不胜感激!

  1. 阅读每条记录。如果记录类型为 94,则使用 SEARCH 动词在 parish/territory 表中查找 parish code 并查找 region code。将区域代码添加到输出记录并将记录写入磁盘。

  2. 如果在教区/领地表中找到教区,则在地区表中增加该领地的计数。

  3. 如果教区不在教区/领土表中,则中止程序。

  4. 将每个区域和该区域中相应数量的策略打印到报告中。

  5. 将已处理的总记录数和已处理的总策略数打印到报告中。

文件部分。                                               

   FD报告文件                                             
       省略标签记录                               
       数据记录是报告记录。                           

   01 报告记录图片 X(132)。              

   FD 打印文件                                              
       省略标签记录                               
       数据记录是打印记录。                            

   01 打印记录图片 X(132)。             

   FD 输入文件                                              
       标签记录是标准的。                               

       复制 TRNREC94。                                             

       喷射                                                      

   工作存储部分。                                       

01 记录-ws。
    05 rec-record-type pic x(2) 读取输入文件
    05 rec-policy-number pic x(8)
    05 填充图片 x(5)
    05 rec-parish-code pic x(3)
    05 填充图片 x(1)
    05 区域代码图片 x(1)
    05 填充图片 x(60)



 01 标题。                                                    
       05 填充图片 X(8) 值“TSTHC020”。    
       05 填充图片 X(30) 价值空间。        
       05 填充图片 X(41)                      
          价值“路易斯安那州农场局保险公司”。      
       05 填充图片 X(30) 价值空间。        
       05 填充图片 X(5) 值“页”。       
       05 打印页码图片 ZZZZZZ9。                   

   01 标题行 2。                                             
       05 填充图片 X(10) 值“2013 年 10 月 22 日”。  



    01 细节线。                                               
        05 DET-TERRITORY PIC X(2)。                      
        05 DET-NUMBER-政策 PIC X(2)。                      

    01 列线。                                               
        05 FILLER PIC X(9) 值“领土”。   
        05 填充图片 X(10) 价值空间。        
        05 填充图片 X(18)                      
           价值“政策数量”。                             

    01 总线。                                                
        05 填充图片 X(26)                      
           值“处理的总记录是”。                     
        05 总记录 PIC X(3)。                      
        05 过滤器图片 X(32)                      
           价值'和处理的总政策是'。    
        05 总体政策 PIC X(3)。                       


    01 程序 ID。                                                    
        05 填充图片 X(50)                       
            值“程序 - TSTXX002- 工作存储从这里开始”。

    01 杂项-变量-SW。                                          
        05 END-OF-FILE-SW PIC XXX。                        
            88 ALL-RECORDS-ARE-PROCESSED 值“是”。        
            88个更多记录值“不”。         


    01 文件状态值。                                         
        05 文件状态图片 99。                         
            88 成功读取值 0。            
            88 成功启动值 0。            
            88 成功写入值 0。  
            88 成功删除值 0。         
            88 成功打开值 0。         
            88 成功关闭值 0。         
            88 文件结束值 10。        
            88 记录未找到值 23。        

        05 页面控制器。                                    
            10 A-LINE-COUNT PIC 999 COMP-3 值 0。     
            10 页计数 PIC 999 COMP-3 值 0。     
            10 A-DISK-COUNTER PIC 9(5) COMP-3 值 0。     

    01 表。                                                  

        05 T1-领土价值。                                 
            10 填充图片 X(4) 值“0101”。      
            10 填充图片 X(4) 值“0207”。      
            10 填充图片 X(4) 值“0307”。      
            10 填充图片 X(4) 值“0409”。     
            10 填充图片 X(4) 值“0509”。     
            10 填充图片 X(4) 值“0609”。     
            10 填充图片 X(4) 值“0709”。     
            10 填充图片 X(4) 值“0801”。     
            10 填充图片 X(4) 值“0901”。     
            10 填充图片 X(4) 值“1001”。     
            10 填充图片 X(4) 值“1104”。     
            10 填充图片 X(4) 值“1204”。     
            10 填充图片 X(4) 值“1305”。     
            10 填充图片 X(4) 值“1405”。     
            10 填充图片 X(4) 值“1506”。     
            10 填充图片 X(4) 值“1606”。     
            10 填充图片 X(4) 值“1707”。     
            10 填充图片 X(4) 值“1802”。     
            10 填充图片 X(4) 值“1902”。     
            10 填充图片 X(4) 值“2002”。     
            10 填充图片 X(4) 值“2103”。     
            10 填充图片 X(4) 值“2208”。   
            10 填充图片 X(4) 值“2308”。      
            10 填充图片 X(4) 值“2409”。      
            10 填充图片 X(4) 值“2506”。      
            10 填充图片 X(4) 值“2605”。      
            10 填充图片 X(4) 值“2704”。      
            10 填充图片 X(4) 值“2804”。      
            10 填充图片 X(4) 值“2903”。      
            10 填充图片 X(4) 值“3003”。      

         05 T1-TERRITORY-TABLE 重新定义了 T1-TERRITORY-VALUES。    
             10 T1-ENTRY 发生 30 次         
                                            由 T1-INDEX 索引。  

                 15 T1-PARISH PIC XXX。                
                 15 T1-领土 PIC X。    


 05 T2-领土-计数。                                    
     10 填充图片 X(4) 值“1”。    
     10 填充图片 X(4) 值“2”。    
     10 填充图片 X(4) 值“3”。    
     10 填充图片 X(4) 值“4”。    
     10 填充图片 X(4) 值“5”。    
     10 填充图片 X(4) 值“6”。    
     10 填充图片 X(4) 值“7”。    
     10 填充图片 X(4) 值“8”。    
     10 填充图片 X(4) 值“9”。    

 05 T2-TERRITORY-TABLE 重新定义了 T2-TERRITORY-COUNT。       
     10 T2-ENTRY 发生 9 次            
                                    由 T2-INDEX 索引。    
         15 T2-领土代码 PIC X。                  
         15 T2-领土-计数器 XXX。  

程序部。
A000-主线。                                                   

            执行 B000-打开程序。                              
            执行 B110 打印标题。                                 
            执行 B300 读取文件。                               
            执行 B500-主要程序                                  
                UNTIL END-OF-FILE-SW = 'YES'。                           
            执行 B100 关闭程序。                              
            停止运行。                                                    

        B000-打开程序。                                          
              打开输出报告文件。                                   
              打开输出打印文件。                                    
              打开 IO 输入文件。                                       

        B100-关闭程序。                                          
              PERFORM B800-PRINT-TOTAL-LINE。                             
              关闭报告文件。                                         
              关闭打印文件。                                          
              关闭输入文件。                                          

        B200-打印头。                                               
              将标题移至打印记录。                               
              写打印记录。                                        
              将 HEADER-LINE-2 移动到打印记录。                        
              前进前写打印记录 1。                     

        B300-阅读文件。                                           
              读取输入文件下一条记录                                
                   在结束时将“是”移动到 END-OF-FILE-SW。                  


        B500-主要程序。                                             
             执行 B600-搜索-领土                 
             执行 B300 读取文件。                             


         B600-搜索-领土。                                          
              将 T1 索引设置为 1。                                         
              搜索 T1-条目                                            
                   结束                                                
                        显示“表中未找到教区”              
                        按值 12 按值 1 调用“CEE3ABD”      
                   什么时候                                                  
                        REC-94-PARISH-CODE = T1-PARISH(T1-INDEX)         
                        将 T1-TERRITORY(T1-INDEX) 移动到   
                               DET-领土。                            


         B700-打印-细节线。                                         
               将细节线移至打印记录。                         
               前进前写打印记录 1。                    

         B800-打印-全线。                                          
               将 A 行计数移至总记录。                       
               将总行移至打印记录。                          
               推进后写打印记录 1。                     

         B900-打印-列-线。                                         
               将列线移动到打印记录。                         
               前进前写打印记录 1。  

         B110-打印-标题。                                            
               将 1 添加到 A-PAGE-COUNT。                                    
               将 A-PAGE-COUNT 移动到 PRINT-PAGE-NUMBER。                   
               执行 B200 打印头。                                
               执行 B900 打印列线。      
4

1 回答 1

2

它认为您的问题在于没有测试 94。仅仅包括那一本抄写本是不够的。

    B500-MAIN-PROCEDURE.                         
         IF REC-94-TYPE EQUAL TO "94"                    
             PERFORM B600-SEARCH-TERRITORY
         END-IF                 
         PERFORM B300-READ-FILE
         .

理想情况下,记录类型为 88,您可以在同一文件的另一个字帖中找到。

请注意,我使用了范围分隔符(END-IF),并将句点/句号的数量限制为在段落/SECTION 开始或到达程序结束之前的强制性数量。

您正在做 IO,您甚至设置了 88,但您没有对 IO 进行任何状态检查。你应该。总是。

为什么你打开了你的 IO 输入?如果你有一个普通的顺序文件,读它,然后写一个新的。否则,您必须在程序运行之前创建备份。如果您不这样做,您的就地更新将成为就地损坏。

于 2013-10-29T16:30:53.183 回答