×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




It would be possible to make it work Alan by redefining the current external structure. Ugly but it works - or at verifies in RDi - not time to actually test!

For example:

Dcl-Ds ExtDef EXTNAME('IFS_OUT2')
Dim(100) Qualified;
End-Ds;

// Redefine to allow specification of Ascend/Descend keywords
Dcl-Ds ExtDefS Based(pExtDef);
Array Dim(100) Ascend;
custnoS Overlay(Array) Like(ExtDef.custno);
lastOrderS Overlay(Array: *Next) Like(ExtDef.lastOrder);
// Use Overlay with explicit positioning if not all fields in DS are required for sorting.
// But must make sure “Array" is the size of the full DS
End-Ds;

Dcl-S pExtDef Pointer Inz(%Addr(ExtDef));

sortA custnoS;

sortA lastOrderS;

*InLR = *On;


On Nov 25, 2015, at 4:16 PM, Alan Campin <alan0307d@xxxxxxxxx> wrote:

Issue is not sort of data. Data is loaded by an SQL in key order. What I am
wanting to do is do a binary search on the data. I know it is in the right
order. A solution that I know works is to use bsearch. I was just trying to
figure out if IBM had a way to do the binary search on a lookup over a data
structure. As far as I know they don't. Just trying to see if someone has a
way to make it work.

On Wed, Nov 25, 2015 at 12:29 PM, Booth Martin <booth@xxxxxxxxxxxx> wrote:

A %lookup binary search on an unsorted array might give you unexpected
results since so many rows are not even looked at with a binary search. If
a high row is an a low region of the array, it will never be found. And
vice-verse.

I wonder what happens if you do a SORTA on Exchange after every fill of
the array? fwiw, here is how I did it.

SORTA keeps each row together regardless of which field is used for
sorting.
...
d ds
d arD dim(350)
d arID# like(S1NAID#) overlay(arD)
d arCOMP like(S1NACOMP) overlay(arD: *next)
d arLAST like(S1NALAST) overlay(arD: *next)
d arFIRST like(S1NAFIRST) overlay(arD: *next)
d arCITY like(S1NACITY) overlay(arD: *next)
d arPHON like(S1NAPHON) overlay(arD: *next)
...

(Sorry, I do not have access to a machine that understands free-form D
specs.)

As I understand it, V7R1 has SORTA(A) and SORTA(D) extenders available.

Here is a screen shot I just posted Of the search-then-sort:
http://martinvt.com/SQL_-beginers-/Sorting_Subfile/sorting_subfile.html


On 11/25/2015 12:50 AM, Alan Campin wrote:

The data structure is dynamic. It get allocated for the amount of storage
it needs. Sorry should have removed it. Just adds complexity. I could just
say.

dcl-ds ExcTariffDS Qualified Dim(1000);

Exchange Zoned(6:0);

Tariff Char(3);

end-ds;


Idx = %Lookup(971002: ExcTariffDs(*).Exchange);


As far as I know, RPG will only do a binary search if you use the ASCEND
or
DESCEND keyword. I am trying to see if there is a way to tell the compiler
to do a binary search on Exchange. I don;t think there is.


I could define it like this but again I don't think it is doing a binary
search on Exchange.


dcl-ds ExcTariffDs;

ExcTariffArr Ascend Dim(1000);

Exchange Zoned(6:0) Overlay(ExcTariffArr:*Next);

Tariff Char(3) Overlay(ExcTariffArr:*Next);

end-ds;


Idx = %Lookup(971002: Exchange);




On Tue, Nov 24, 2015 at 7:05 PM, Booth Martin <booth@xxxxxxxxxxxx> wrote:

I am not sure I understand the issue. The Subject says "Ascend and data
structure lookups." %lookup normally does binary searches on
ascend/descend arrays. It isn't clear how LoadedCount is a help, and it
might be a real problem with a Ascend array?


On 11/24/2015 7:47 PM, Alan Campin wrote:

Given the following data structure, is there anyway to have it do a
binary
search on the lookup?

dcl-ds ExcTariffDS Qualified Dim(32766) Based(ptrExcTariffDs);

Exchange Zoned(6:0);

Tariff Char(3);

end-ds;


Idx = %Lookup(971002: ExcTariffDs(*).Exchange:1:LoadedCount);

--

This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 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.