× 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.



Hi, David:

Does this data contain any embedded null characters (x'00')? If so, then you may find using the C functions can be somewhat "problematic" as C strings are "null terminated" -- this means as soon as a X'00' is encountered, it is considered to be "end of string." *:-/*

You might also want to look at the following New MI instructions available for use as built-in functions in any ILE language:

MEMCMP
MEMCPY
MEMMOVE
SCANX

These MI built-in functions generate "in line" code in the ILE compiler back-end, so you do not incur the same kind of overhead as when you call a C runtime function that must be bound and requires a *SRVPGM to be activated into one or more activation groups within your job.

Where is this data coming from? Is it in a stream file in the IFS? If so, you might also want to consider using the _mmap() or _mmap64() API to map the entire stream file into teraspace, where you can then easily search it, without the overhead of having to read the file first.

Hope that helps,

Mark S. Waterbury

> On 11/30/2011 11:51 AM, David Gibbs wrote:
Folks:

I've got a problem where I need to analyze and manipulate very large blocks of character data.

This character data could be well in excess of 64k.

Since the limit for RPG character fields on 5.4 is 64k ... I can't use normal BIF's.

Upgrading to 6.1 isn't an option due to customer requirements (this was my first idea, but it got shot down).

My current thought is to use pointers and C functions to analyze the text in the space.

%alloc to create space and get a pointer

strstr in place of %scan(s)
strlen in place of %len(%trim(s))
strcat& %realloc in place of s1 + s2
strncpy in place of %subst

dealloc when I'm done with the space.

Obviously I would wrapper the C functions in procedures so I don't have to deal with the individual C api's directly.

I'm not supper happy with the idea of having to deal with this data using pointers and C api's ... Any suggestions on a different approach to handling these large character variables?

Thanks!

david

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
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.