首页 > 解决方案 > 如何使用在cobol中具有重复值的键编写合并文件

问题描述

请帮助编写具有重复记录的键的合并 2 个文件。

我的要求是

         Key1.       Key2
          015.        015
          015.        015
          017.        017
         019.        017
         019.        019
         019.        019

        Op file needs to check
             Key1=key2
          If so,my op will be
               015
               015
              017
              017
              019
              019
              019 like this..
         I have written like this.But it is working for 015 and 
           017..not helping for 019
           Process para.
              If eof-input1 = 'N'
                 If key1 = key2
                    Move details from file2
                      to op1
                    Write op1
                    Read file2
                 Else
                    If key1<key2
                       Read file1 until eof1
                        or key1>=key2
                        If key1=key2
                         Move details
                          Write op1
                         Read file2
                        End-if
                      End-if
                    End-if
                  End-if.

如果我尝试像这样为 cond key1>key2 编写它不起作用..我不知道如何获得完整的操作。请帮忙。提前致谢!!

标签: filemergekeymatchcobol

解决方案


关键点:

通用合并逻辑

我发现EVALUATE语句的以下逻辑最容易阅读/调试。假设升序键,基本上你用最低键读取文件,当它们相等时你有匹配

if (key-file1 > key-file2)
    read file2
else if (key-file1 < key-file2)
    read file1
else
    /* what you do here is determined by the file structure
       * one to one match -> read both files
       * one to many relationship read the `may` file */
   read both files ?

当任一文件达到eof时,您将停止循环。然后分别处理剩下的

以更 Cobol 的形式

       perform  r100-read-file-1
       perform  r200-read-file-2
       
       perform until eof-file-1 or eof-file-2
          evaluate true
          when key-File-1 > key-file-2
             ...  what ever
             perform r200-read-file-2
          when key-File-1 < key-file-2
              ...  what ever
             perform r100-read-file-1
          when key-File-1 = key-file-2
             perform process-match
             perform r100-read-file-1 and/or perform r200-read-file-2
         end-evaluate
      end-perform
      
      perform until eof-file-1
         ...  what ever
         perform r100-read-file-1
      end-perform
      
      
      perform until eof-file-2
         ...  what ever
         perform r200-read-file-2
      end-perform          

推荐阅读