TechTip: Creating Zip Files on the iSeries

  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times
Zip files are heavily used in the PC world for archiving groups of files and for treating a group of files as a unit. The phenomenal support for Java on the iSeries and the UNIX-like Qshell environment make it possible for the iSeries to create and extract from zip files, too.

Consider, for example, a challenge. You have been asked to write a program that will FTP customer account balance information to another system. The file is to be in CSV format, but zipped in order to reduce the file size. Your first impulse might be to use iSeries Access or a third-party alternative to transfer the database file to a PC, converting the data to CSV format in the process. Next, you would use a package like WinZip to create a zip file. Last, you would use the PC's FTP client to send the zip file to the other system.

There's nothing wrong with that approach, but you might prefer to have the iSeries, maybe even in attended mode, do all the work instead.

To create a CSV file from a database file, use the Copy to Import File (CPYTOIMPF) command. Create the file in PC-compatible format in a directory of the root system of the Integrated File System (IFS).

          TOSTMF('/home/somedir/balances.csv') +
          MBROPT(*REPLACE) +
          RCDDLM(*CRLF) +

The new file is called balances.csv, and it resides in the directory called /home/somedir. OS/400 creates the file with code page 1252. Records are terminated with the carriage-return/line-feed combination. Default values of parameters that are not shown here assure that character fields are preceded and terminated with quotation marks and that the decimal point is a comma. In this example, date fields (i.e., fields of the date data type) are expressed in the CSV file with the MM/DD/YYYY format commonly used in the United States.

To zip the file, use CL's STRQSH (Start Qshell) command to run Java's jar tool in the Qshell environment:

STRQSH CMD('jar cfM balances.csv')

The first parameter of the jar command consists of three options, which must be keyed in the cases in which I've typed them. Option c means that the zip file is to be created. Option f indicates that the jar file name,, follows in the next parameter. The M option suppresses creation of a manifest file, a file that contains information about packages in the zip archive. The manifest file can be suppressed, since it is not applicable in this case.

Now that the zip file has been built, you can use the iSeries FTP client to send it to the other system. Don't forget to use a binary transfer.

The entire process--creating the CSV file, creating the zip file, and transmitting to the other system--can easily be carried out with one CL program that you may even be able to schedule to run automatically from the job scheduler.

For more information about Qshell and the jar utility, I recommend two resources. The first is Sun's jar documentation, which you can find on the Web. The second is chapter 23 of Qshell for iSeries by Ted Holt and Fred A. Kulack.

Paul Amsden is a big proponent of simplifying processes when possible.