Hi Glenn,
Unless I missed it, I don't see where your code loads the I data structure. Here's a quick (untested) sample of how I would do it.
FFile1 IF E K Disk
FFile2 UF A E K Disk Rename( FileRec: FileRec2 )
D dsFile1 DS LikeRec( FileRec )
D dsFile2 DS LikeRec( FileRec2: *output )
/free
DoU %eof( File1 );
Read File1 dsFile1;
If not %eof( File1 );
dsFile2 = dsFile1;
SetLL dsFile1.key File2;
If %equal( File2 );
Update FileRec2 dsFile2;
Else;
Write FileRec2 dsFile2;
EndIf;
EndIf;
EndDo;
- Kurt Anderson
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Gundermann, Glenn / Kuehne + Nagel / Tor ZI-A
Sent: Wednesday, November 11, 2009 6:59 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: Reading directly into a DS
Hi folks,
I'm going in circles here and was hoping someone wouldn't mind helping me.
I'm trying to read data directly into a DS and then write the data to another file, either with an update or a write, using the data structure.
I know there are different styles, like READ file-name ds-name, and I'm not sure which is the preferred style.
First of all, we're on V5R4.
This program reads the records from an intermediate file and either updates or adds them to the master file.
The intermediate file was created using CRTDUPOBJ of the master file, which is why the record format is renamed.
The files each have 7 fields, of course with the same name.
1. I tried having a meaningful prefix on the F-spec but I received a compile error RNF2356, I think because there is a limit of 13 to the field name length.
What can I do to improve this?
2. I'm getting compile time errors:
*RNF7030 30 7 The name or indicator is not defined. (I.field1, I.field2, etc. for the 7 fields in the file)
*RNF7701 20 2 The data structure is not allowed for the operation. (Update ACCDOCR I and Write ACCDOCR I)
Any tips would be most appreciated.
Yours truly,
Glenn Gundermann
Work: (905) 501-6596
Cell: (416) 317-3144
glenn.gundermann@xxxxxxxxxxxxxxxx<mailto:glenn.gundermann@xxxxxxxxxxxxxxxx>
Here is my code (sans header comments):
h option(*srcstmt:*nodebugio)
// Intermediate eFile Document Code file in arrival sequence.
FACCDOCCOD2IF E DISK Rename(ACCDOCR:ACCDOCR2)
F Prefix('I.': 3)
// eFile Document Code file by Document Code.
FACCDOCCODLUF A E K DISK
//------------------------------------------------------
// Parameters.
//------------------------------------------------------
D CAEFL004 pr ExtProc('CAEFL004')
D CAEFL004 pi
//------------------------------------------------------
// Vaiable Declarations.
//------------------------------------------------------
D I e ds ExtName(ACCDOCCODE)
D Qualified
//------------------------------------------------------
// Start of Executable Code.
//------------------------------------------------------
/free
Read ACCDOCCOD2;
Dow Not %eof(ACCDOCCOD2);
Chain I.ACCTYPND ACCDOCCODL;
If %found(ACCDOCCODL);
Update ACCDOCR I;
Else;
Write ACCDOCR I;
EndIf;
Read ACCDOCCOD2;
EndDo;
*InLr = *On;
Return;
/end-free
________________________________
To learn more about Kuehne + Nagel Ltd, please visit our website at: www.kuehne-nagel.com For the Kuehne + Nagel email disclaimer, visit:
http://www.kn-portal.com/material/Electronic_Email_Disclaimer_English_French.pdf
Visitez le site internet de Kuehne + Nagel Lt?e: www.kuehne-nagel.com Notre d?charge de responsabilit? est disponible comme suit:
http://www.kn-portal.com/material/Electronic_Email_Disclaimer_English_French.pdf
As an Amazon Associate we earn from qualifying purchases.