× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@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-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.