|
On 12/19/06, Barbara Morris <bmorris@xxxxxxxxxx> wrote:
Chris Pando wrote: > > Which would get deeply nested for a bunch of keys. I have a generic > file comparison report, which needs to be able to compare 1 to n key > fields; I do it like: > ... > DoU ($I = keyCnt Or memcmpstr <> 0); > $I = $I + 1; > memcmpstr = memcmp( @bfr1@($I) > : @bfr2@($I) > : @fldLnB($I) > ); > ... The deep nesting can be easily avoided (see below). The problem with comparing by memcmp is that it doesn't compare correctly for many data types. For example, packed data: -99999 < 12345, but x'99999d' > x'12345f' varying length: 'abc' < 'd', but x'0003818283??????' > x'000184????????????' etc.
Indeed. The code segment is from a tool we use for regression testing, when we want to quickly compare the same file in different environments. The comparisons use the 'natural' key, which has yet to include one with negative numbers. In fact, the documentation states that it won't work on a negative numeric key. If the need arises, I'll fix the logic to allow for negative numeric keys, but the need has yet to arise. I don't think natural keys should include negative numbers, but that's just me. As for a varying length key field, all I can say is blecch; I'd rather hash to a numeric key.l
Here's Jon's code reduced to a single select, with no extra nesting. The nested select is a bit nicer, but I think this is ok too. select; // compare the year first when E1.Year < E2.Year; return -1; when E1.Year > E2.Year; return 1; // year is equal; compare the month next when E1.Month < E2.Month; return -1; when E1.Month > E2.Month; return 1; // everything is equal return 0; endsl;
I think the above is a little easier to understand, if you know the fields to be compared at compile time. It won't work if that information is available until run time, however. Chris -- "The issue is not one of power, but coping with the human difficulty in understanding complex structures". - Leif Svalgaard
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.