MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Rexx

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF
View previous topic :: View next topic  
Author Message
sridevi
Beginner


Joined: 10 May 2003
Posts: 6
Topics: 3

PostPosted: Sat May 10, 2003 2:38 am    Post subject: Rexx Reply with quote

Hi,

I have a file and I need to search for a particular string in a file. If the search is successful then I want to get the line number where the string
was located. Then I want to delete all the records from that line number.How can I do this .Please guide me.I want to achieve this
without a sequntial read.

Thanks,
Sridevi
Back to top
View user's profile Send private message
Cogito-Ergo-Sum
Advanced


Joined: 15 Dec 2002
Posts: 637
Topics: 43
Location: Bengaluru, INDIA

PostPosted: Sat May 10, 2003 3:15 am    Post subject: Reply with quote

sridevi,
What if the string is found in mulitple records? You want to delete all the records after the last record? Or, something else?
_________________
ALL opinions are welcome.

Debugging tip:
When you have eliminated all which is impossible, then whatever remains, however improbable, must be the truth.
-- Sherlock Holmes.
Back to top
View user's profile Send private message
ofer71
Intermediate


Joined: 12 Feb 2003
Posts: 358
Topics: 4
Location: Israel

PostPosted: Sun May 11, 2003 12:42 am    Post subject: Reply with quote

The best solution I can think of, is something like this Edit-Macro:
Code:

/* REXX */
ADDRESS ISREDIT "MACRO PROCESS"
ADDRESS ISREDIT "FIND 'my string' FIRST"
ADDRESS ISREDIT "(CURRLINE) = LINENUM .ZCSR"
ADDRESS ISREDIT "(LASTLINE)  = LINENUM .ZLAST"
ADDRESS ISREDIT "LABEL &CURRLINE = .A"
ADDRESS ISREDIT "LABEL &LASTLINE  = .B"
ADDRESS ISREDIT "DELETE .A .B"
EXIT

________
smoke weed every day


Last edited by ofer71 on Sat Feb 05, 2011 10:56 am; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
semigeezer
Supermod


Joined: 03 Jan 2003
Posts: 1014
Topics: 13
Location: Atlantis

PostPosted: Sun May 11, 2003 2:57 am    Post subject: Reply with quote

OK... I'm feeling picky Smile :
Quote:

ADDRESS ISREDIT "(CURRLINE) = LINENUM .ZCSR"
ADDRESS ISREDIT "(LASTLINE) = LINENUM .ZLAST"
ADDRESS ISREDIT "LABEL &CURRLINE = .A"
ADDRESS ISREDIT "LABEL &LASTLINE = .B"
ADDRESS ISREDIT "DELETE .A .B"
EXIT

That is a lot of unnecessary assigning. Why not just use
Code:
Address isredit "del all .zcsr .zlast"
Back to top
View user's profile Send private message Visit poster's website
sridevi
Beginner


Joined: 10 May 2003
Posts: 6
Topics: 3

PostPosted: Mon May 12, 2003 7:52 am    Post subject: Reply with quote

Hi ,

Thanks for your information . Edit macro is not working for a file having large amount of data.While using a macro for huge file , I am getting the message "browse subsituted " for a file.Please is there is anyother way to achieve this.

One more question is it possible to delete a record using EXECIO command? Please guide me.

Thanks,
Sridevi
Back to top
View user's profile Send private message
sridevi
Beginner


Joined: 10 May 2003
Posts: 6
Topics: 3

PostPosted: Mon May 12, 2003 8:15 am    Post subject: Reply with quote

Hi,

Is there any way to set "end of file "condition for a file using
EXECIO.

Assume that there are 1 to 10 records in a sequential file.
and I want to set EOF at 6 th record.Is it possible to do this using EXECIO.

Thanks,
Sridevi
Back to top
View user's profile Send private message
Mike
Beginner


Joined: 03 Dec 2002
Posts: 114
Topics: 0
Location: Sydney, Australia

PostPosted: Mon May 12, 2003 10:46 pm    Post subject: Reply with quote

You can use EXECIO to read a speciific number of records e.g.

"EXECIO n DISKR ddname (STEM input."

where n is the number of lines to be read, ddname is the ddname that the file is allocated to and input. the stem into which the data is placed. You can then traverse input.1-input.n. e.g.

Do i = 1 to n
Say input.i
End

Subsequent EXECIO's continue from the next record not already read. Not exactly setting EOF, but then again there is only one real EOF. It still achieves what I think you are trying to achieve.
_________________
Regards,
Mike.
Back to top
View user's profile Send private message
ofer71
Intermediate


Joined: 12 Feb 2003
Posts: 358
Topics: 4
Location: Israel

PostPosted: Mon May 12, 2003 11:18 pm    Post subject: Reply with quote

With EXECIO, after the ddname, you can specify the starting record to read from.
________
Suzuki FXR150 specifications


Last edited by ofer71 on Sat Feb 05, 2011 10:56 am; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
sridevi
Beginner


Joined: 10 May 2003
Posts: 6
Topics: 3

PostPosted: Fri May 16, 2003 11:19 pm    Post subject: Reply with quote

Hi all,

Thanks for ur information . Since my input file so huge , its difficult to load into stem.So as you said I thought of using EXECIO with skip command..so that it will skip some of the records.. Then start processing from the next record till end of file.


"EXECIO 1 DISKRU INDD1 1300 " (LIFO"
PULL LINE
PUSH '**********'
"EXECIO 1 DISKW INDD1"

Here I am skipping first 1299 record read .Start reading from 1300 record onwards. But here instead of deleting the records from 1300 , I am just making ********** to the records . Then again in sort I am omiting this ********(unwanted records) ...Is it possible to delete a record thru EXECIO.

Thanks,
Sridevi
Back to top
View user's profile Send private message
coolman
Intermediate


Joined: 03 Jan 2003
Posts: 283
Topics: 27
Location: US

PostPosted: Tue May 20, 2003 3:45 am    Post subject: Reply with quote

Sridevi,

Here is a SORT solution.It will be definitely faster than the other solutions. If you have SYNCSORT, then change the program name to SYNCTOOL.

Code:

//STEP1   EXEC PGM=ICETOOL                                   
//TOOLMSG DD SYSOUT=*                                         
//DFSMSG  DD SYSOUT=*                                         
//OUT1    DD SYSOUT=*                                         
//IN1     DD *                                               
@A 1 @ABC 212 @XYZ 43746                                     
@A 2 @DEF 646 @XYZ 293238923                                 
@A 4 @B 3 @GRP 718 @XYZ 9459458                               
@A 1 @FDF 718 @XYZ 096567454857                               
@A 1 @DFG 408 @XYZ 454857                                     
@A 1 @DFG 408 @XYZ 454857                                     
@A 1 @DFG 408 @XYZ 454857                                     
/*                                                           
//TOOLIN   DD *                                               
  COPY FROM(IN1) USING(CTL1)                                 
  COPY FROM(IN1) TO(OUT1) USING(CTL2)                             
/*                                                               
//CTL1CNTL DD *                                                   
 INREC FIELDS=(1,80,SEQNUM,8,ZD)                                 
 OUTFIL FNAMES=CTL2CNTL,INCLUDE=(1,80,SS,EQ,C'@FDF 718'),         
 OUTREC=(C' OPTION STOPAFT=',81,8,80:X)                           
/*                                                               
//CTL2CNTL DD DSN=&TN,DISP=(,PASS),UNIT=SYSDA,SPACE=(TRK,(1,1))   
//                                                               


Here the string to be searched is "@FDF 718", change it to your Search string and execute the job.

Hope this helps...

Cheers,
Coolman.

P.S : I have assumed your Input File to 80 FB.
________
L platform


Last edited by coolman on Sat Feb 05, 2011 1:20 am; edited 2 times in total
Back to top
View user's profile Send private message
Cogito-Ergo-Sum
Advanced


Joined: 15 Dec 2002
Posts: 637
Topics: 43
Location: Bengaluru, INDIA

PostPosted: Tue May 20, 2003 11:00 am    Post subject: Reply with quote

Oops, Coolman !

You missed out couple of things.

The first statement is a COPY statement for IN. Since, you do not have a TO coded in the COPY statement, DFSORT will expect a DD name as CPY1OUT. This is missing. So, the job would abend with MAXCC 16.

Secondly, CTL2CNTL is pointing to a dataset with DISP=(,PASS) i.e. DISP=( NEW,PASS). It must point to it with DISP=(SHR,PASS) with the VOL, REF as well (as it is a temp dataset).
_________________
ALL opinions are welcome.

Debugging tip:
When you have eliminated all which is impossible, then whatever remains, however improbable, must be the truth.
-- Sherlock Holmes.
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12370
Topics: 75
Location: San Jose

PostPosted: Tue May 20, 2003 5:10 pm    Post subject: Reply with quote

cogito,

coolman did not miss any thing. Take a closer look at the the following statement
OUTFIL FNAMES=CTL2CNTL,INCLUDE=(1,80,SS,EQ,C'@FDF 718'),

By coding like that coolman is creating a dynamic control card on the fly which he is using for the second copy statement.

Since the control card is being created dynamically, the disp=(,pass) is translated as disp=(new,pass,delete). Since there are no steps following this step which would receive the control card , the dataset will be deleted at the end of copy step.

Coolman did have a flaw. He did not allocate OUT2 dataset.I guess he meant OUT1.His toolin copy stmt refers to OUT2 , but in the JCL he had OUT1 allocated.

Cogito try running coolman's solution and see if it abends as you stated.

kolusu
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Cogito-Ergo-Sum
Advanced


Joined: 15 Dec 2002
Posts: 637
Topics: 43
Location: Bengaluru, INDIA

PostPosted: Tue May 20, 2003 10:44 pm    Post subject: Reply with quote

Sorry Coolman. My mistake. Sad
_________________
ALL opinions are welcome.

Debugging tip:
When you have eliminated all which is impossible, then whatever remains, however improbable, must be the truth.
-- Sherlock Holmes.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group