fhg
Volume 10, Number 5 -- February 3, 2010

Read a Save File

Published: February 3, 2010

Hey, Ted:

I had an unusual experience recently and thought other readers of Four Hundred Guru might also find it of interest. A physical file had no active records and three deleted records. We were trouble-shooting a problem and needed to know what data was in the three deleted records. We have two third-party products that are supposed to retrieve deleted records, but they failed us. Here's what we did.

First, we saved the file to a save file that we keep on hand.

SAVOBJ OBJ(IBLOCK) LIB($$DATA)
   DEV(*SAVF) OBJTYPE(*FILE) SAVF(MYLIB/MYSAVF)

Next, we ran Display File Description to find the save file's record length.

DSPFD FILE(MYLIB/MYSAVF)

DSPFD told us that the record length of our save file was 528 bytes, so we created a program-described file of the same record length.

CRTPF FILE(QTEMP/MYFILEDELS) RCDLEN(528)

We tried to copy the save file to the physical file, but that was no good.

CPYF FROMFILE(MYLIB/MYSAVF) TOFILE(QTEMP/MYFILEDELS) FMTOPT(*NOCHK)

So we wrote RPG program CPY528R and a CL driver, CPY528C, to duplicate the save file into the physical file.

FInput     IF   F  528        Disk
FOutput    O    F  528        Disk
DRec              DS           528
 /Free
     Read Input Rec;
     DoW not %eof(Input);
        Write Output Rec;
        Read Input Rec;
     EndDo;
     *inLR = *On;
     Return;
 /End-Free

PGM
OVRDBF     FILE(INPUT) TOFILE(MYLIB/MYSAVF)
OVRDBF     FILE(OUTPUT) TOFILE(QTEMP/MYFILEDELS)
CALL       PGM(CPY528R)
DLTOVR     FILE(INPUT)
DLTOVR     FILE(OUTPUT)
ENDPGM

Calling the CL program copied the save file into physical file MYFILEDELS, where we could use the Display Physical File Member command to view the data in the three deleted records.

DSPPFM FILE(MYFILEDELS)

It was not long until our mystery was solved.

Later I got curious and decided to go a step farther. As I studied the data in the physical file, I came to realize that first 512 bytes of each record of the save file contained database data and other things, and that bytes 513 - 528 of each record were devoted to a sequence number and something else that was unrelated to my purposes.

I also determined that each deleted database record's data was preceded by a left brace. So I threw together the following RPG program (PRTMYFILER) and CL driver PRTMYFILEC.

H DftActGrp(*No) ActGrp(*New) Option(*SrcStmt:*NoDebugIO)

FInput     IF   F  528        Disk
FQSysPrt   O    F  132        Printer

D InputStruc      DS           528    Qualified
D  Data                   1    512A
D MyFileRec     E DS                  ExtName(MYFILE) Inz
D Buffer          S           1024A   Varying
D EOF             S               N
D Offset          S             10I 0

D Get             PR
D Buffer                      1024A   Varying
D EOF                             N

 /Free
     DoU *inLR = *On;
        If %Len(Buffer) < %Len(MyFileRec) + 1;
           Get(Buffer: EOF);
        EndIf;
        Offset = %Scan ('{' : Buffer);
        If Offset > *zero;
           Buffer = %SubSt(Buffer:Offset);
           If %Len(Buffer) < %Len(MyFileRec) + 1;
              Get(Buffer: EOF);
           EndIf;
           Buffer = %SubSt(Buffer : 2);
           MyFileRec = %SubSt(Buffer : 1: %Len(MyFileRec));
           Monitor;
              Except PrintLine;
              Buffer = %SubSt(Buffer : %Len(MyFileRec) + 1);
           On-Error;
           EndMon;
        Else;
           Clear Buffer;
        EndIf;
        If EOF;
            Leave;
        EndIf;
     EndDo;
     *inLR = *On;
     Return;
 /End-Free

OQSysPrt   e            PrintLine   1
O                       mf_field1
O                       mf_field2        +0001
O                       mf_field3        +0001
O                       mf_field4     M  +0001
O                       mf_field5     J  +0001

P Get             B
D                 PI
D Buffer                      1024A   Varying
D EOF                             N
 /Free
     Read Input InputStruc;
     If %EOF();
        EOF = *On;
     Else;
        Buffer += InputStruc.Data;
     EndIf;
 /End-Free
P                 E


PGM
OVRDBF     FILE(INPUT) TOFILE(MYLIB/MYSAVF)
CALL       PGM(PRTMYFILER)
DLTOVR     FILE(INPUT)
ENDPGM

The fields in the output specs are the database fields, which are defined in data structure MyFileRec. These are the fields in the saved database file, MYFILE.

Calling the CL program produced a report of the three deleted records.

I am not recommending the mining of save files as standard operating procedure, and we have taken measures to make sure that the third-party utilities won't fail us the next time we need them. But in this instance, reading a save file helped us resolve a problem, and I offer our experience in case it may be of benefit to someone else someday.

--Name withheld by request




                     Post this story to del.icio.us
               Post this story to Digg
    Post this story to Slashdot


Sponsored By
HELP/SYSTEMS

SEQUEL ViewPoint®--Data Access & Analysis
for Power Systems™ Servers

                                               · Easy to use by IT and end users
                                               · Automated data access and display
                                               · Complete BI package: reports, tables,key
                                                  performance indicators, and dashboards
                                               · IBM i-centric for real-time data analysis
                                               · Expert support and training
                                               · Secure data access
                                               · Green screen, Web, browser

SEQUEL--Fast, efficient & cost-effective data analysis

Click here for a FREE Information Kit!


Senior Technical Editor: Ted Holt
Technical Editor: Joe Hertvik
Contributing Technical Editors: Erwin Earley, Brian Kelly, Michael Sansoterra
Publisher and Advertising Director: Jenny Thomas
Advertising Sales Representative: Kim Reed
Contact the Editors: To contact anyone on the IT Jungle Team
Go to our contacts page and send us a message.

Sponsored Links

looksoftware:  Why Web Enable? View the FREE on-demand webinar and get a FREE white paper
RevSoft:  Enterprise solutions for data transfers, messaging and scheduling
COMMON:  Join us at the annual 2010 conference, May 3 - 6, in Orlando, Florida


 

IT Jungle Store Top Book Picks

Easy Steps to Internet Programming for AS/400, iSeries, and System i: List Price, $49.95
The iSeries Express Web Implementer's Guide: List Price, $49.95
The System i RPG & RPG IV Tutorial and Lab Exercises: List Price, $59.95
The System i Pocket RPG & RPG IV Guide: List Price, $69.95
The iSeries Pocket Database Guide: List Price, $59.00
The iSeries Pocket SQL Guide: List Price, $59.00
The iSeries Pocket Query Guide: List Price, $49.00
The iSeries Pocket WebFacing Primer: List Price, $39.00
Migrating to WebSphere Express for iSeries: List Price, $49.00
Getting Started With WebSphere Development Studio Client for iSeries: List Price, $89.00
Getting Started with WebSphere Express for iSeries: List Price, $49.00
Can the AS/400 Survive IBM?: List Price, $49.00
Chip Wars: List Price, $29.95


 
The Four Hundred
The System iWant, 2010 Edition: Entry Boxes

IBM Touts System i TCO in ITG Report

Open Source Mainstream Begins to Flow Through IBM i Land

Mad Dog 21/21: One-Trick Pony, But What a Trick!

Oracle Goes Back to IBM's Roots with Sun Deal Done

Four Hundred Stuff
Island Pacific Rediscovers i/OS Roots with Retail Apps

From Passwords to MFT, Cyber-Ark Has a Vault for That

Utilities Department Gains Workflow Efficiencies from S4i Systems

m-Power Gets New Interactive Reporting Templates

VAI Shows Confidence in 2010 with New Hires

Four Hundred Monitor
Four Hundred Monitor's
Full iSeries Events Calendar

System i PTF Guide
January 30, 2010: Volume 12, Number 05

January 23, 2010: Volume 12, Number 04

January 16, 2010: Volume 12, Number 03

January 9, 2010: Volume 12, Number 02

January 2, 2010: Volume 12, Number 01

December 26, 2009: Volume 11, Number 52

TPM at The Register
HP trots out 0% financing (again)

Power7 power lunch and launch next Monday

December chip sales reach 2007 levels

IBM chases SMBs with custom data closets

Sun Oracle revs LDom VMs for Sparc Ts

Brits choose Altix UV supers to fight cancer

IBM countersues Neon over zPrime accelerator

Ellison: Only Oracle can do OLTP clustering

Citrix desktop virt soars in Q4

ISSCC: Home cooking at the wafer bakers

Oracle tag teams Solaris and Linux

Oracle to invest in Sparc iron, clusters

THIS ISSUE SPONSORED BY:

Infor
SEQUEL Software
System i Developer


Printer Friendly Version


TABLE OF CONTENTS
What a Lifelong DB2 Fanatic Sees in MySQL

Read a Save File

Admin Alert: Did You Lose ECS on February 1?

Four Hundred Guru

BACK ISSUES




 
Subscription Information:
You can unsubscribe, change your email address, or sign up for any of IT Jungle's free e-newsletters through our Web site at http://www.itjungle.com/sub/subscribe.html.

Copyright © 1996-2010 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc., 50 Park Terrace East, Suite 8F, New York, NY 10034

Privacy Statement