Could you also post all the output you've got from 'SAY' command?
140 *-* DO M=1 TO K
>>> "1"
>>> "3"
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL2"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL2"
&HLQ..&SS&LNV..JCL2
145 *-* END
140 *-* DO M=1 TO K
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL4"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL4"
&HLQ..&SS&LNV..JCL4
145 *-* END
140 *-* DO M=1 TO K
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL3"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL3"[/code]
Could you also post all the output you've got from 'SAY' command?
140 *-* DO M=1 TO K
>>> "1"
>>> "3"
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL2"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL2"
&HLQ..&SS&LNV..JCL2
145 *-* END
140 *-* DO M=1 TO K
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL4"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL4"
&HLQ..&SS&LNV..JCL4
145 *-* END
140 *-* DO M=1 TO K
141 *-* SAY "FROM" FROM_VAR
>>> "FROM &HLQ."
FROM &HLQ.
142 *-* SAY "TO" TO_VAR
>>> "TO TRE"
TO TRE
143 *-* OUTPUT1.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
>>> "&HLQ..&SS&LNV..JCL3"
144 *-* SAY OUTPUT1.M
>>> "&HLQ..&SS&LNV..JCL3"[/code]
Code:
/*REXX*/
"ISREDIT MACRO"
TRACE (R)
TEMP="NEW,CATLG,DELETE"
TEMP2=",CATLG,DELETE"
SETVAR="SET"
K=0
I=1
J=1
"ISREDIT SEEK ALL '"TEMP"' "
"ISREDIT (TOT) = SEEK_COUNTS"
CALL NEWPGM
"ISREDIT SEEK ALL WORD '"TEMP2"'"
"ISREDIT (CNT) = SEEK_COUNTS"
CALL CATLGPGM
"ISREDIT SEEK ALL WORD '"SETVAR"' "
"ISREDIT (CNTR) = SEEK_COUNTS"
CALL CHNGSYMB
INSLIN=K
TEMP1=EXEC
"ISREDIT FIND FIRST '"TEMP1"'"
IF RC=0 THEN DO
"ISREDIT (NUM) = LINENUM .ZCSR"
NUM1=NUM-5
END
"ISREDIT CURSOR = "NUM1" 1"
"ISREDIT (LINE2) = LINE .ZCSR"
RES1=TOT+CNT+3
I=1
"ISREDIT LINE_BEFORE .ZCSR = '//JS0010 EXEC PGM=IDCAMS'"
"ISREDIT LINE_BEFORE .ZCSR = '//SYSPRINT DD SYSOUT=*'"
"ISREDIT LINE_BEFORE .ZCSR = '//SYSOUT DD SYSOUT=*'"
"ISREDIT LINE_BEFORE .ZCSR = '//SYSIN DD *'"
DO WHILE INSLIN > 0
OUT=' ' || DELETE ||' ' || OUTPUT.I
"ISREDIT LINE_BEFORE .ZCSR = '"OUT"' "
INSLIN=INSLIN-1
I=I+1
END
INS=" SET MAXCC=0"
"ISREDIT LINE_BEFORE .ZCSR = '"INS"' "
"ISREDIT LINE_BEFORE .ZCSR = '/*'"
"ISREDIT END"
EXIT
/* CALLS NEWPGM WHEN TEMP IS "NEW,CATLG,DELETE" */
NEWPGM:
I=1
COUNT=TOT
COUNT1=TOT
DO WHILE COUNT > 0
IF RC=0 THEN DO
"ISREDIT (VAL) = LINENUM .ZCSR"
VAL1=VAL-1
"ISREDIT (LINE) = LINE " VAL1
INPUT.I = STRIP(LINE)
PARSE VALUE "'"INPUT.I"'" WITH PREC ','
OUT=POS('=',PREC)
RES=SUBSTR(PREC,OUT+1)
PARSE VALUE "'"RES"'" WITH PRE '(' POST ')'
IF POST = "" THEN DO
OUTPUT.I=RES
K=K+1
COUNT=COUNT-1
I=I+1
J=I
END
ELSE DO
IF DATATYPE(POST) == NUM THEN DO
NOP
COUNT=COUNT-1
END
ELSE DO
OUTPUT.I=RES
K=K+1
COUNT=COUNT-1
I=I+1
J=I
END
END
END
"ISREDIT FIND NEXT '"TEMP"' "
END
RETURN
/* CALLS CATLGPGM WHEN TEMP IS ",CATLG,DELETE" */
CATLGPGM:
COUNT=CNT
COUNT1=CNT
DO WHILE COUNT > 0
IF RC=0 THEN DO
"ISREDIT (VAL) = LINENUM .ZCSR"
VAL1=VAL-1
"ISREDIT (LINE) = LINE " VAL1
INPUT.J = STRIP(LINE)
PARSE VALUE "'"INPUT.J"'" WITH PREC ','
OUT=POS('=',PREC)
RES=SUBSTR(PREC,OUT+1)
OUTPUT.J=RES
PARSE VALUE "'"RES"'" WITH PRE '(' POST ')'
IF POST = "" THEN DO
OUTPUT.J=RES
K=K+1
COUNT=COUNT-1
J=J+1
END
ELSE DO
IF DATATYPE(POST) == NUM THEN DO
NOP
COUNT=COUNT-1
END
ELSE DO
OUTPUT.J=RES
K=K+1
COUNT=COUNT-1
J=J+1
END
END
END
"ISREDIT FIND NEXT '"TEMP2"' "
END
RETURN
/* CHANGES ALL THE SYMBOLIC PARAMETER TO NORMAL VARIABLES */
CHNGSYMB:
L=0
DO WHILE CNTR > 0
IF RC=0 THEN DO
L=L+1
"ISREDIT (LIN2) = LINE .ZCSR"
STEM1.L = STRIP(LIN2)
PARSE VAR STEM1.L '//' 'SET' STEM2.L '=' STEM3.L
STEM2.L=STRIP(STEM2.L)
STEM3.L=STRIP(STEM3.L)
"ISREDIT FIND NEXT '"SETVAR"' "
CNTR=CNTR-1
END
DO I=1 TO L
SAY "L VALUE" L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
SAY "J VALUE" J
DO M=1 TO K
SAY "FROM" FROM_VAR
SAY "TO" TO_VAR
OUTPUT.M=TRANSLATE(OUTPUT.M,FROM_VAR,TO_VAR)
SAY OUTPUT.M
END
END
RETURN
Joined: 03 May 2010 Posts: 158 Location: Kuala Lumpur
Sorry.. My bad.. TRANSLATE function would change the string char by char....
can you try with this code ?
Code:
DO I=1 TO L
SAY "L VALUE" L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
SAY "J VALUE" J
DO M=1 TO K
SAY "FROM" FROM_VAR
SAY "TO" TO_VAR
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
END
Sorry.. My bad.. TRANSLATE function would change the string char by char....
can you try with this code ?
Code:
DO I=1 TO L
SAY "L VALUE" L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
SAY "J VALUE" J
DO M=1 TO K
SAY "FROM" FROM_VAR
SAY "TO" TO_VAR
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS+LENGTH(FROM_VAR))
ELSE
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
END
Yes you are right i analysed it and came to a conclusion just now and you replied the same....it is changing whereever the letter is found....i asked about that in yesterday's post itself but for got it afterwards...will check this code and let you know....
Joined: 03 May 2010 Posts: 158 Location: Kuala Lumpur
There is a small change in my previous post.. I edited it....
Code:
DO I=1 TO L
SAY "L VALUE" L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
SAY "J VALUE" J
DO M=1 TO K
SAY "FROM" FROM_VAR
SAY "TO" TO_VAR
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
END
There is a small change in my previous post.. I edited it....
Code:
DO I=1 TO L
SAY "L VALUE" L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
SAY "J VALUE" J
DO M=1 TO K
SAY "FROM" FROM_VAR
SAY "TO" TO_VAR
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
END
The output comes properly but it comes as TRE.&SSDV04.JCL1
The problem is it checks for &SS. which is not found so POS1is 0 and hence no changes takes place....instead of using POS can i use INDEX or anyother syntax...????
Joined: 03 May 2010 Posts: 158 Location: Kuala Lumpur
Even 'INDEX' function will work same as this.
I'm not sure, whether symbolic parameter can come without '.' at end.
But still, you may check one more time for without '.'
Code:
DO I=1 TO L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
DO M=1 TO K
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
FROM_VAR='&'||STEM2.I
DO M=1 TO K
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
I'm not sure, whether symbolic parameter can come without '.' at end.
But still, you may check one more time for without '.'
Code:
DO I=1 TO L
FROM_VAR='&'||STEM2.I||'.'
TO_VAR = STEM3.I
DO M=1 TO K
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
FROM_VAR='&'||STEM2.I
DO M=1 TO K
POS1=POS(FROM_VAR,OUTPUT.M);
IF POS1 > 1 THEN
OUTPUT.M=SUBSTR(OUTPUT.M,1,POS1-1)||TO_VAR||SUBSTR(OUTPUT.M,POS1+LENGTH(FROM_VAR))
IF POS1 = 1 THEN
OUTPUT.M=TO_VAR||SUBSTR(OUTPUT.M,LENGTH(FROM_VAR)+1)
SAY OUTPUT.M
END
END
Hi,
Thanks a lot for helping me....Now the code is working fine...without your help i could have done this tool.....would have stuck up with the one code that works without symbolic parameter.....thanks..... now will try to insert the step in this below mentioned case :
when a cursor is placed in a line and enter key is pressed the delete step should be inserted.... At present the step will be inserted 5 lines before the first EXEC....now will try to change it....