Solved

IBM i - CL Array

Posted on 2016-08-25
5
101 Views
Last Modified: 2016-08-25
Does anyone know if it is possible to create, sort, and read from arrays within CL on the IBM i?  I am currently running V7R1.

Basically I am creating a program that will write out all *PGM objects within a given library and display the last change date for that object.  (this is for our SOX auditors).

I have the program created easily enough and I wrote everything to a .CSV file in the IFS.  However, our auditors are ultimately looking for the most recently changed object in a given library. So for them to get that from my spreadsheet, they would have to open it up, and highlight everything - and then do a SORT on the CHANGE DATE "column".

I was wondering if - before I wrote the data to the outfile - I could write all the data to an array and then after everything was written to the array, sort the array based on the Change Date, and then read back through the array so that I can then write the output to my .csv file in the IFS.

Anyone have any idea if that is possible using CL? I know you can do that sort of thing with COBOL and RPG - but was hoping to accomplish this with just CL.

Thanks in advance!
0
Comment
Question by:Matthew Roessner
5 Comments
 
LVL 34

Accepted Solution

by:
Gary Patterson earned 500 total points
ID: 41770991
Short answer - still no native arrays support in CL.  You can "roll your own" using pointers, but that's a lot of work and error-prone.

Why not just use SQL to sort your output?

CREATE TABLE QTEMP/myoutput as (select lib, object, date_changed from mylib/dspobjd order by lib,date_changed, object) with data

Then use CPYTOIMPF to generate a CSV from the QTEMP/myoutput table.
0
 
LVL 27

Expert Comment

by:tliotta
ID: 41770997
I can think of various ways to sort data with CL.

For example. various types of sort algorithms can be fairly directly implemented with ILE CL coding.

I've also used the QLGSORT API, which can sort files or input buffers such as an array in memory. The biggest problem with it is that it's so flexible that it has a large set of control parameters. It gets complicated. It's not especially fast, but it doesn't matter with a small data set.

Or maybe you could simply insert your array entries into a keyed user index. Define the key according to your sort key. Then just retrieve the entries back out in key sequence.

One thing I haven't tried but should be doable would be use Qshell sort. It could be tricky getting your array into and out of the "file" format that sort wants, but it's possible to access a user space in Qshell as a "file". If the array is based on a pointer to the space, it could probably be made to work.

Other than those thoughts, it might depend on your array data definitions. Can you post enough code for us to know what is needed? Also, what's the maximum number of entries are you looking at? At least one other thought might depend on info you can add.
0
 
LVL 34

Assisted Solution

by:Gary Patterson
Gary Patterson earned 500 total points
ID: 41771012
Forgot to mention:  

Depending on the TR level you're on, look at the QSYS2.OBJECT_STATISTICS view.  It contains much of the info found in DSPOBJD, and that means that you could do all of this with a single SQL statement and a CPYTOIMPF command.

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/IBM+i+Technology+Updates/page/QSYS2.Object_Statistics+table+function+ease+of+use
0
 
LVL 18

Expert Comment

by:daveslash
ID: 41771013
PGM
RUNSQL     SQL('create table MyLib.TheTarget as ( +
                select * +
                  from MyLib.TheSource +
                 order by someColumn +
                ) with data')
ENDPGM

Open in new window

0
 
LVL 1

Author Closing Comment

by:Matthew Roessner
ID: 41771023
Thanks Gary
0

Featured Post

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article we will learn how to backup a VMware farm using Nakivo Backup & Replication. In this tutorial we will install the software on a Windows 2012 R2 Server.
As a business owner, there are many things that keep you up at night. Profit margins, employee retention, human resource protocols, whether your product or service will remain competitive. When you own or manage a technology company that operates la…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question