|
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-2024 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.