AMT Help Files

COMPARE...ENDCOMPARE

Syntax

Command
Mandatory parameter
Optional parameter
Mandatory keyword
Optional keyword

COMPARE (<File 1>, <Layout 1>[, <Start line number id 1>] [, SKIPCLEAR], <File 2> , <Layout 2>[, <Start line number id 2>] [, SKIPCLEAR]) [RESULTOKTO <Status>]
 
<Keylist>

<Code lines>

ENDCOMPARE

Description

Creates a loop that compares two files record by record, indicating in SI-FILEID whether a match is found or not.
During the comparing process, the system item SI-FILEID will be filled with: spaces if the records in the file IDs match, the file ID with the lower value if the key is set to ascending or the file ID with the higher value if the key is set to descending. In the following loop cycle the next record of the file ID in SI-FILEID will be read, if it is empty the next record of both files will be read.

Diagram

Returned value type

None

Parameters

Parameter Description
<File 1> File id for the file that must be compared with <File 2>.
<Layout 1> Layout definition that is used for organizing <File 1>.
<Start line number id 1> When set, <File 1> is read from this line on.
SKIPCLEAR With this option an eventual CLEARATFIRSTREAD option set in the NAMEFILE command will not be executed  (i.e. the existing file will not be cleared when the COMPARE is the first action on the file after the NAMEFILE command). This option can be set for both files individually.
<File 2> File id for the file that must be compared with <File 1>.
<Layout 2> Layout definition that is used for organizing <File 2>.
<Start line number id 2> When set, <File 2> is read from this line on.
<Status> Variable that holds the result status. This variable can be defined as a boolean or as an alphanumeric variable. In case the execution of COMPARE...ENDCOMPARE fails (files don' t exist) the result status is set to "False" (for boolean) or "*****" (for alphanumeric).
<Keylist> List of keys, denoting the fields to compare. Each key has the following syntax:

<New line> KEY (<Field 1>, <Field 2>[, ASC | DSC])

where:
<New line> is a separate new line for each added key
<Field 1> is an expression giving the variable for the first file and
<Field 2> is an expression giving the variable for the second file.
ASC This will compare the KeyIds in an ascending manner.

ASC: fileA.key1 < fileB.key1 will result in SI-FILEID = fileA
DSC This will compare the KeyIds in an descending manner.

DSC: fileA.key1 > fileB.key1 will result in SI-FILEID = fileB
If there is a match SI-FILEID will be spaces.
<Code lines> Code lines that are executed within the COMPARE loop.
RESULTOKTO Command that directs the result status of a command to the specified boolean or alphanumeric (length 5) variable (instead of using the system item RESOK). This command must always be specified on the same line as the COMPARE instruction itself.

Example

In the example shown below two files are compared, an English and a Dutch file with addresses.

The files are compared with the key's streetname and housenumber on which the files were sorted as well. When the address is the same in both files the record is written to a "match" file, otherwise the address not present in the other file is written to a "unique" file.

namefile (f_ad_nl'adres.txt')
namefile (f_ad_en'address.txt')
namefile (f_addressmatch'addressmatch.txt')
namefile (f_addressunique, 'addressunique.txt')
compare (f_ad_nlr_adresf_ad_enr_address)
    key (r_adres.straatr_address.street, ASC)
    key (r_adres.huisnummerr_address.number, ASC)
    if si-fileid = ''
        // The addresses match
        writefile(f_addressmatch, r_adres)
    elseif si-fileid = 'F_AD_NL'
        // The addresses did not match, the address in the Dutch file is a smaller value
        writefile(f_addressunique, r_adres)
    elseif si-fileid = 'F_AD_EN'
        // The addresses did not match, the address in the English file is a smaller value
        writefile(f_addressunique, r_address)
    endif
endcompare

 

Return to

Commands