|
You can't have a record name the same as the file name. This happens when
tables (files) are created with SQL. Use the rename keyword on the file
spec.
On 4/7/06, Stiju Easo <stiju.as400@xxxxxxxxx> wrote:
>
> i will check it out Francis,
> thanks for the tip
>
>
> i am getting a strange error in compiling a RPGLE ussing a PF
>
> it is
>
> 1)Record-format name in externally-described file already
> defined; record format ignored.
> 2)The name or indicator is not defined.
> 3)Expression contains an operand that is not defined.
> All Record Formats for externally-described file ignored or
>
>
> It compiles if i dont use this file
> Agian i checked i am not ussing that record format, i am sure
> can u throe some light into it?
>
>
>
> On 4/7/06, Lapeyre, Francis <FLAPEYRE@xxxxxxxx> wrote:
> >
> > A word of caution, though - you need to use the fixed-format SCAN opcode
> -
> > the BIF %SCAN only returns the result to the first element of the array,
> > at
> > least on V5R1 (I got bit by that one).
> >
> >
> > Francis
> >
> >
> >
> > -----Original Message-----
> > From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:
> rpg400-l-bounces@xxxxxxxxxxxx]
> > On Behalf Of Stiju Easo
> > Sent: Friday, April 7, 2006 2:23 AM
> > To: RPG programming on the AS400 / iSeries
> > Subject: Re: RPGLE pgm to parse a string
> >
> > Thanks *Jonathan Mason*
> > * *
> > * *ur idea was the best,
> > i was troubled with reverse way
> >
> > thanks for all who contributed to this thread
> > hoping that i get an opportunity to return courtesy
> >
> >
> > On 4/6/06, Jonathan Mason <jonathan.mason@xxxxxxxxxxxxxxxx> wrote:
> > >
> > > Terry
> > >
> > > >> You can populate an array with the positions of a search argument
> > > >> with a string using the SCAN op code.
> > >
> > > Thanks for that, in 20+ years of programming RPG I had never noticed
> > > that
> > > -
> > > just goes to show you never stop learning.
> > >
> > > Stiju,
> > >
> > > Using the SCAN op code as Terry suggests, the following sub-procedure
> > > seems to do what I think you want:
> > >
> > > H DFTACTGRP(*NO)
> > >
> > > D ParseIt pr 255a Varying
> > > D iString 1024a Value
> > > D iSep 1a Value Options(*NoPass)
> > >
> > > D wResult s 32a
> > >
> > > * Expect *NULL as only two words in string...
> > > C Eval wResult=ParseIt('The_Cat')
> > > C wResult Dsply
> > >
> > > * Expect "The" as only three words in string...
> > > C Eval wResult=ParseIt('The_Cat_Sat')
> > > C wResult Dsply
> > >
> > > * Expect "Cat" as third last word in string...
> > > C Eval wResult=ParseIt('The_Cat_Sat_On')
> > > C wResult Dsply
> > >
> > > * Expect *NULL as only two words in string...
> > > C Eval wResult=ParseIt('_Cat_Sat')
> > > C wResult Dsply
> > >
> > > * Expect *NULL as third last word is missing...
> > > C Eval wResult=ParseIt('The__Cat_Sat')
> > > C wResult Dsply
> > >
> > > * Expect "The" as third last word in string...
> > > C Eval wResult=ParseIt('The-Cat-Sat':'-')
> > > C wResult Dsply
> > >
> > > C Eval *InLr = *On
> > >
> > > p ParseIt b
> > >
> > > D ParseIt pi 255a Varying
> > > D iString 1024a Value
> > > D iSep 1a Value Options(*NoPass)
> > >
> > > D Pos s 5 0 Dim(1024)
> > > D Ix s 5 0
> > >
> > > D wSep s 1a
> > > D Error c Const('*ERROR')
> > > D Null c Const('*NULL')
> > > D Pos1 s 5 0
> > > D Pos2 s 5 0
> > > D Pos3 s 5 0
> > > D wPos s 5 0
> > >
> > > * Check the number of parameters passed...
> > >
> > > C Select
> > > C When %Parms = 1
> > > C Eval wSep = '_'
> > > C When %Parms = 2
> > > C Eval wSep = iSep
> > > C Other
> > > C Return Error
> > > C EndSl
> > >
> > > * Scan the string for all occurrences of the separator
> > > * character. The first element of the Pos array will hold
> > > * the first occurrence, the second the second, etc. All
> > > * elements after the last occurrence of the separator character
> > > * will be zero...
> > >
> > > C wSep Scan iString Pos
> > >
> > >
> > > * There need to be at least two separator characters from the
> > > * end of the string. If there are three or more then we need
> > > * return the value between the 3rd and 2nd separators, but if
> > > * there are only two and the second starts in position 2 or
> > > * later then the word we want starts in position 1...
> > >
> > > C Eval Pos1 = 0
> > > C Eval Pos2 = 0
> > > C Eval Pos3 = 0
> > >
> > > * First we need to find the last occurrence of the separator
> > > * character...
> > >
> > > C Eval Ix = 1
> > > C *Zero
> > > Lookup Pos(Ix) 91
> > >
> > > * ...and then Determine the last three occurrences of
> > > * the separator character in the string, Pos1 being the
> > > * last occurrence...
> > >
> > > C If Ix > 1
> > > C Eval Pos1 = Pos(Ix-1)
> > > C EndIf
> > >
> > > C If Ix > 2
> > > C Eval Pos2 = Pos(Ix-2)
> > > C EndIf
> > >
> > > C If Ix > 3
> > > C Eval Pos3 = Pos(Ix-3)
> > > C EndIf
> > >
> > > * Return a value depending on the contents of Pos3 and Pos2...
> > >
> > > C Select
> > > C When Pos3 = 0 and Pos2 = 0
> > > C Return Null
> > > C When Pos3 = 0 and Pos2 > 1
> > > C Return %Subst(iString:1:Pos2 - 1)
> > > C When Pos3 > 1 and Pos2 = Pos3 + 1
> > > C Return Null
> > > C When Pos3 > 1 and Pos2 > Pos3 + 1
> > > C Return %Subst(iString:Pos3+1:Pos2-Pos3-1)
> > > C Other
> > > C Return Null
> > > C EndSl
> > >
> > > p ParseIt e
> > >
> > > It returns the third last delimited "word" from the string and allows
> > > you to specify the delimiter. If no delimiter is specified then "_"
> > > is used. If there are fewer than three delimited "words" in the
> > > string then "*ERROR"
> > > is
> > > returned.
> > >
> > > All the best
> > >
> > > Jonathan
> > >
> > >
> > >
> > >
> > > --
> > > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> > > list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
> > > unsubscribe, or change list options,
> > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> > > or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a
> > > moment to review the archives at http://archive.midrange.com/rpg400-l.
> > >
> > >
> > --
> > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
> > To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
> unsubscribe,
> > or
> > change list options,
> > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: RPG400-L-request@xxxxxxxxxxxx
> > Before posting, please take a moment to review the archives at
> > http://archive.midrange.com/rpg400-l.
> > --
> > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
> list
> > To post a message email: RPG400-L@xxxxxxxxxxxx
> > To subscribe, unsubscribe, or change list options,
> > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> > or email: RPG400-L-request@xxxxxxxxxxxx
> > Before posting, please take a moment to review the archives
> > at http://archive.midrange.com/rpg400-l.
> >
> >
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.