Thread View: bit.listserv.tsorexx
11 messages
11 total messages
Started by Steve Thompson
Tue, 29 Jan 2013 18:38
Copy of Source from HFS to MVS
Author: Steve Thompson
Date: Tue, 29 Jan 2013 18:38
Date: Tue, 29 Jan 2013 18:38
36 lines
2122 bytes
2122 bytes
[Xposted to TSO-REXX & MVS-OE] I have been attempting to copy a source file from hfs to an MVS PDS. ocopy completes giving an error message about a record being longer than the lrecl. Ok, I understand this. But, ocopy was also to do ASCII to EBCDIC (1047) translation (C++ source). What I get is total gibberish that looks just like what is shown by the browser under ISPF shell. Here is the REXX statement: "OCOPY INDD(SYSUT1) OUTDD(SYSUT2) TEXT TO1047 PATHOPTS(USE) CONVERT(YES)" Here is the ALLOC info: ALLOC .... PATHOPTS(ORDONLY) FILEDATA(TEXT) The file in question shows to be a "plain" file, not an archive. So, anyone have an idea what I could be running into? Or, a better way to do this? Understand, this is a tool EXEC that is obtaining various source files for compile purposes, so it picks up various sources and puts them into the corresponding PDSes. Regards, Steve Thompson ---------------------------------------------------------------------- For TSO-REXX subscribe / signoff / archive access instructions, send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Copy of Source from HFS to MVS
Author: Steve Comstock
Date: Tue, 29 Jan 2013 19:09
Date: Tue, 29 Jan 2013 19:09
61 lines
2781 bytes
2781 bytes
On 1/29/2013 11:12 AM, Steve Thompson wrote:
> [Xposted to TSO-REXX & MVS-OE]
>
> I have been attempting to copy a source file from hfs to an MVS PDS.
>
> ocopy completes giving an error message about a record being longer than
> the lrecl.
>
> Ok, I understand this. But, ocopy was also to do ASCII to EBCDIC (1047)
> translation (C++ source).
>
> What I get is total gibberish that looks just like what is shown by the
> browser under ISPF shell.
>
> Here is the REXX statement:
>
> "OCOPY INDD(SYSUT1) OUTDD(SYSUT2) TEXT TO1047 PATHOPTS(USE) CONVERT(YES)"
Just a hunch: try specifying CONVERT as: CONVERT((BPXFX311))
>
> Here is the ALLOC info:
>
> ALLOC .... PATHOPTS(ORDONLY) FILEDATA(TEXT)
>
> The file in question shows to be a "plain" file, not an archive.
>
> So, anyone have an idea what I could be running into? Or, a better way to
> do this?
>
> Understand, this is a tool EXEC that is obtaining various source files for
> compile purposes, so it picks up various sources and puts them into the
> corresponding PDSes.
>
> Regards,
> Steve Thompson
>
--
Kind regards,
-Steve Comstock
The Trainer's Friend, Inc.
303-355-2752
http://www.trainersfriend.com
* To get a good Return on your Investment, first make an investment!
+ Training your people is an excellent investment
* Try our tool for calculating your Return On Investment
for training dollars at
http://www.trainersfriend.com/ROI/roi.html
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Copy of Source from HFS to MVS
Author: Steve Comstock
Date: Tue, 29 Jan 2013 20:09
Date: Tue, 29 Jan 2013 20:09
73 lines
3366 bytes
3366 bytes
On 1/29/2013 12:27 PM, Steve Thompson wrote:
> From: Steve Comstock <steve@TRAINERSFRIEND.COM>
> Date: 01/29/2013 01:12 PM
>
>
>
> On 1/29/2013 11:12 AM, Steve Thompson wrote:
>> [Xposted to TSO-REXX & MVS-OE]
>>
> <SNIPPAGE>
>> Here is the REXX statement:
>>
>> "OCOPY INDD(SYSUT1) OUTDD(SYSUT2) TEXT TO1047 PATHOPTS(USE)
> CONVERT(YES)"
>
>
> Just a hunch: try specifying CONVERT as: CONVERT((BPXFX311))
>
> <SNIPPAGE>
>
> Thank you Steve. As I read the doc I have up, what I have is supposed to
> work on a non-customized system (this system is supposed to be as shipped
> by IBM).
Not sure what you mean by that. The z/OS UNIX System Services Command Reference
doc, in chapter 3 (TSO/E Commands), under the OCOPY command, under
character_conversion_table the last entry is BPXFX311; this is standard,
as shipped by IBM.
<ad>
Or, of course, one could sign up for our three day course
"Introduction to z/OS UNIX" which includes this discussion
and a lot more.
Check out
http://www.trainersfriend.com/UNIX_and_Web_courses/u510descr.htm
</ad>
>
> Making that change, this worked and the PDS member is readable.
>
> Regards,
> Steve Thompson
>
> ----------------------------------------------------------------------
> For TSO-REXX subscribe / signoff / archive access instructions,
> send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
>
--
Kind regards,
-Steve Comstock
The Trainer's Friend, Inc.
303-355-2752
http://www.trainersfriend.com
* To get a good Return on your Investment, first make an investment!
+ Training your people is an excellent investment
* Try our tool for calculating your Return On Investment
for training dollars at
http://www.trainersfriend.com/ROI/roi.html
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Copy of Source from HFS to MVS
Author: Steve Thompson
Date: Tue, 29 Jan 2013 20:33
Date: Tue, 29 Jan 2013 20:33
45 lines
2809 bytes
2809 bytes
From: Steve Comstock <steve@TRAINERSFRIEND.COM> Date: 01/29/2013 02:11 PM On 1/29/2013 12:27 PM, Steve Thompson wrote: > From: Steve Comstock <steve@TRAINERSFRIEND.COM> > Date: 01/29/2013 01:12 PM <SNIPPAGE> Not sure what you mean by that. The z/OS UNIX System Services Command Reference doc, in chapter 3 (TSO/E Commands), under the OCOPY command, under character_conversion_table the last entry is BPXFX311; this is standard, as shipped by IBM. <SNIP> Well, when I read that doc, the following things were what I was paying attention to, which gave me the idea that "YES" was going to do what CONVERT((BPXFX311)) accomplished. YES Specifies that the system is to perform conversion and use the default conversion table (BPXFX000) in the system library concatenation. (BPXFX000 is an alias; when shipped by IBM, it points to BPXFX111.) p 865 -------------------- * The character conversion table is the default table, member BPXFX000 of the SYS1.BPXLATE data set. (BPXFX000 is an alias; when shipped by IBM, it points to BPXFX111.) p. 867, z/OS V1R12.0 UNIX System Services Command Reference, Chapter 3. TSO/E commands Regards, Steve Thompson ---------------------------------------------------------------------- For TSO-REXX subscribe / signoff / archive access instructions, send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Copy of Source from HFS to MVS
Author: Steve Thompson
Date: Tue, 29 Jan 2013 21:29
Date: Tue, 29 Jan 2013 21:29
31 lines
1948 bytes
1948 bytes
From: Steve Comstock <steve@TRAINERSFRIEND.COM> Date: 01/29/2013 01:12 PM On 1/29/2013 11:12 AM, Steve Thompson wrote: > [Xposted to TSO-REXX & MVS-OE] > <SNIPPAGE> > Here is the REXX statement: > > "OCOPY INDD(SYSUT1) OUTDD(SYSUT2) TEXT TO1047 PATHOPTS(USE) CONVERT(YES)" Just a hunch: try specifying CONVERT as: CONVERT((BPXFX311)) <SNIPPAGE> Thank you Steve. As I read the doc I have up, what I have is supposed to work on a non-customized system (this system is supposed to be as shipped by IBM). Making that change, this worked and the PDS member is readable. Regards, Steve Thompson ---------------------------------------------------------------------- For TSO-REXX subscribe / signoff / archive access instructions, send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Generic string check
Author: Ken MacKenzie
Date: Thu, 31 Jan 2013 10:41
Date: Thu, 31 Jan 2013 10:41
34 lines
2619 bytes
2619 bytes
Hi All,
I'm looking to see if anyone has any suggestions on making this as
efficient as possible.
I want to check a field against a string that start with a certain number
of characters, followed by a certain number of unknown characters, then a
certain number of known characters. For example, IGY%%%%%%%W.
At the moment I'm doing:
/* LS is the field to be searched */
/* TEXT is the search string */
Do i = 1 To Length(text)
If Substr(text, i, 1) = '%' Then
ls = Overlay('%', ls, i, 1)
End
If ls = text.i Then
/* do stuff */
I also want to introduce a search for an unknown number of unknown
characters, for example, IGY*W - oh for regular expressions in REXX!
Ken MacKenzie
Pramerica Systems Ireland Limited
is a private company limited by shares
incorporated and registered in the Republic of Ireland with registered
number 319900
and registered office at 6th Floor, South Bank House, Barrow Street,
Dublin 4, Ireland.
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Generic string check
Author: Itschak Mugzach
Date: Thu, 31 Jan 2013 10:58
Date: Thu, 31 Jan 2013 10:58
49 lines
3373 bytes
3373 bytes
Why don't you check for the characters you know, instead the once you
don't? Try POS:
If ((Pos(Substr(Text,1,3),Ls) = 1) & Pos(Substr(Text,?,1) ,ls) = 9)) then do
Itschak
On Thu, Jan 31, 2013 at 12:40 PM, Ken MacKenzie
<Ken.MacKenzie@pramerica.ie>wrote:
> Hi All,
>
> I'm looking to see if anyone has any suggestions on making this as
> efficient as possible.
>
> I want to check a field against a string that start with a certain number
> of characters, followed by a certain number of unknown characters, then a
> certain number of known characters. For example, IGY%%%%%%%W.
>
> At the moment I'm doing:
> /* LS is the field to be searched */
> /* TEXT is the search string */
>
> Do i = 1 To Length(text)
> If Substr(text, i, 1) = '%' Then
> ls = Overlay('%', ls, i, 1)
> End
> If ls = text.i Then
> /* do stuff */
>
> I also want to introduce a search for an unknown number of unknown
> characters, for example, IGY*W - oh for regular expressions in REXX!
>
> Ken MacKenzie
> Pramerica Systems Ireland Limited
> is a private company limited by shares
> incorporated and registered in the Republic of Ireland with registered
> number 319900
> and registered office at 6th Floor, South Bank House, Barrow Street,
> Dublin 4, Ireland.
>
> ----------------------------------------------------------------------
> For TSO-REXX subscribe / signoff / archive access instructions,
> send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
>
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Generic string check
Author: Adrian Stern
Date: Thu, 31 Jan 2013 11:11
Date: Thu, 31 Jan 2013 11:11
56 lines
3675 bytes
3675 bytes
If the leading and trailing characters are known you can use the parse verb
Parse var <string> <token> variable <token>
After parsing the variable will contain whatever occurred between the two
tokens.
Searching cannot be done on <token> variable <token>
Depending on the size of the file to be searched different techniques will
be suitable. Are we talking gigabytes or kilobytes?
-----Original Message-----
From: TSO REXX Discussion List [mailto:TSO-REXX@VM.MARIST.EDU] On Behalf Of
Ken MacKenzie
Sent: den 31 januari 2013 11:40
To: TSO-REXX@VM.MARIST.EDU
Subject: [TSO-REXX] Generic string check
Hi All,
I'm looking to see if anyone has any suggestions on making this as
efficient as possible.
I want to check a field against a string that start with a certain number
of characters, followed by a certain number of unknown characters, then a
certain number of known characters. For example, IGY%%%%%%%W.
At the moment I'm doing:
/* LS is the field to be searched */
/* TEXT is the search string */
Do i = 1 To Length(text)
If Substr(text, i, 1) = '%' Then
ls = Overlay('%', ls, i, 1)
End
If ls = text.i Then
/* do stuff */
I also want to introduce a search for an unknown number of unknown
characters, for example, IGY*W - oh for regular expressions in REXX!
Ken MacKenzie
Pramerica Systems Ireland Limited
is a private company limited by shares
incorporated and registered in the Republic of Ireland with registered
number 319900
and registered office at 6th Floor, South Bank House, Barrow Street,
Dublin 4, Ireland.
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Generic string check
Author: John P Kalinich
Date: Thu, 31 Jan 2013 13:20
Date: Thu, 31 Jan 2013 13:20
75 lines
3721 bytes
3721 bytes
I have 3 Rexx functions that mimic the member group parsing (: / *) used in
the PDS command (CBT file 182). For example, if IGY*W was the pat argument
value, then using that argument against each member name of IGY.SIGYCOMP
would yield the following matches: IGYCRWT and IGY8RWTU.
Regards,
John K
Select
When Pos("*",pat) > 0 Then /* Match, save in list */
If Match_wildcard(member,pat) Then
Do
pds2name.ctr = member
ctr = ctr + 1
End
. . .
Match_wildcard: Parse Arg mem, pat
Parse Var pat pat1 "*" pat2
len1 = length(pat1)
len2 = length(pat2)
If Left(mem,len1) = pat1 &,
(Pos(pat2,mem,len1+1) > 0 | len2 = 0) Then Return 1
Else Return 0
From: Ken MacKenzie <Ken.MacKenzie@PRAMERICA.IE>
To: TSO-REXX@vm.marist.edu
Date: 01/31/2013 04:42 AM
Subject: [TSO-REXX] Generic string check
Sent by: TSO REXX Discussion List <TSO-REXX@vm.marist.edu>
Hi All,
I'm looking to see if anyone has any suggestions on making this as
efficient as possible.
I want to check a field against a string that start with a certain number
of characters, followed by a certain number of unknown characters, then a
certain number of known characters. For example, IGY%%%%%%%W.
At the moment I'm doing:
/* LS is the field to be searched */
/* TEXT is the search string */
Do i = 1 To Length(text)
If Substr(text, i, 1) = '%' Then
ls = Overlay('%', ls, i, 1)
End
If ls = text.i Then
/* do stuff */
I also want to introduce a search for an unknown number of unknown
characters, for example, IGY*W - oh for regular expressions in REXX!
Ken MacKenzie
Pramerica Systems Ireland Limited
is a private company limited by shares
incorporated and registered in the Republic of Ireland with registered
number 319900
and registered office at 6th Floor, South Bank House, Barrow Street,
Dublin 4, Ireland.
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Re: Generic string check
Author: Pete Hartung
Date: Sat, 16 Feb 2013 01:38
Date: Sat, 16 Feb 2013 01:38
99 lines
7075 bytes
7075 bytes
One more try
/* REXX StringCk */
/* does string contain mask? */
String = 'the quick brown fox jumps over the lazy dog'
Mask.1 = '%%E%*%%%%%BROWN'
Mask.2 = '*QUICK*F%X'
Mask.3 = 'THE%Q%*%**BR%%%'
Mask.4 = 'THE*BROWN'
Mask.5 = 'THE*BRxWN'
Mask.6 = 'THE*BROWN*F%%'
Mask.7 = '*FOX*'
Mask.8 = '*F%X*'
MASK.9 = '*F%*%MP*'
MASK.10= 'T*E LAZY DOG'
MASK.11= '*O%E'
Do m = 1 to 11
If StringCK(string,mask.m) then say Mask.m 'Found'
else say Mask.m 'NOT found'
End
exit 0
StringCK:
Arg stringx,maskx
Tx1 = word(strip(translate(maskx,' ','%*'),L),1)
Pap = pos('*',maskx)
Do while Pap > 0
If substr(maskx,Pap+1,1) = '%' | substr(maskx,Pap+1,1) = '*' then Do
maskx = substr(maskx,1,Pap-1)||'%*'||substr(maskx,Pap+2)
Pap = Pap - 1
End
Pap = pos('*',maskx,Pap+1)
End
LenMask = length(maskx)
Ptx = 1
Do while Ptx > 0
stringx = substr(stringx,Ptx)
If substr(maskx,1,1) = '%' then Ptx = 1
else Ptx = pos(Tx1,stringx)
If Ptx = 0 then Return 0
stringx = substr(stringx,Ptx)
Ptx = 0
i = 1
Do j = 1 to length(stringx)
If i > LenMask then Return 1
Select
when substr(maskx,i,1) = '*' &,
substr(maskx,i+1,1) = substr(stringx,j,1) then Do
i=i+2
If Ptx = 0 then Ptx = j+1
End
when substr(maskx,i,1) = '%' |,
substr(maskx,i,1) = substr(stringx,j,1) then i=i+1
when substr(maskx,i,1) = '*' then iterate
otherwise leave
End
End
If i > LenMask then Return 1
End
Return (i > LenMask)
/* */
-----Original Message-----
From: TSO REXX Discussion List [mailto:TSO-REXX@VM.MARIST.EDU] On Behalf Of Ken MacKenzie
Sent: Thursday, January 31, 2013 5:40 AM
To: TSO-REXX@VM.MARIST.EDU
Subject: [TSO-REXX] Generic string check
Hi All,
I'm looking to see if anyone has any suggestions on making this as efficient as possible.
I want to check a field against a string that start with a certain number of characters, followed by a certain number of unknown characters, then a certain number of known characters. For example, IGY%%%%%%%W.
At the moment I'm doing:
/* LS is the field to be searched */
/* TEXT is the search string */
Do i = 1 To Length(text)
If Substr(text, i, 1) = '%' Then
ls = Overlay('%', ls, i, 1)
End
If ls = text.i Then
/* do stuff */
I also want to introduce a search for an unknown number of unknown characters, for example, IGY*W - oh for regular expressions in REXX!
Ken MacKenzie
Pramerica Systems Ireland Limited
is a private company limited by shares
incorporated and registered in the Republic of Ireland with registered number 319900 and registered office at 6th Floor, South Bank House, Barrow Street, Dublin 4, Ireland.
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions, send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
SV: [TSO-REXX] Generic string check
Author: Thomas Berg
Date: Sat, 16 Feb 2013 01:57
Date: Sat, 16 Feb 2013 01:57
135 lines
11061 bytes
11061 bytes
A variant:
/* REXX */
String = 'the quick brown fox jumps over the lazy dog'
mask.1 = '%%E%%%%%%%BROWN'
mask.2 = '*QUICK*F%X'
mask.3 = 'THE%Q%***%BR%%%*'
mask.4 = 'THE*BROWN*'
mask.5 = 'THE*BRxWN'
mask.6 = 'THE*BROWN*F%%'
mask.7 = '*FOX*'
mask.8 = '*F%X*'
mask.9 = '*F%*%MP*'
mask.10 = '%%e%%**%%%brown'
mask.11 = '*quick*f%x'
mask.12 = 'the%q%%%%%br%%%*'
mask.13 = 'the*brown*'
mask.14 = 'the*brxwn'
mask.15 = 'the*brown*f%%'
mask.16 = '*fox*'
mask.17 = '*f%x*'
mask.18 = '*f%*%mp*'
mask.19 = 'THE**'
mask.20 = '*br*'
Say string
Do m = 1 to 20
x1 = Translate(mask.m,'_%','%*') /* By some reason I switch to DB2 mask chars...*/
If Mask(x1,string,'A') then say Left(x1,25) 'Found'
Else say Left(x1,25) 'NOT found'
End
exit 0
/*--------------------------------------------------------------------*/
MASK: Procedure
uc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ���'
lc = 'abcdefghijklmnopqrstuvwxyz���'
nr = '0123456789'
Parse Arg mask, string, opt
/* Variants of string to upper-, lower or any-case */
If Abbrev('UPPERCASE',opt,1) Then ,
string = Translate(string,uc,lc)
Else If Abbrev('LOWERCASE',opt,1) Then ,
string = Translate(string,lc,uc)
Else If Abbrev('ANY',opt,1) ! Abbrev('ALL',opt,1) Then Do
string = Translate(string,uc,lc)
mask = Translate(mask,uc,lc)
End
x1 = ''
/*
Normalize the mask:
*/
Do i = 1 To Length(mask)
Do k = i By 1 While Substr(mask,k,1) == '_'
End
/* If single char and 0-n chars mask is adjacent to each other
move 0-n chars mask to after the single char mask */
If k > i & Substr(Reverse(x1),1,1) == '%' Then Do
x1 = Reverse(Substr(Reverse(x1),2)) !! ,
Substr(mask,i,k - i) !! '%'
i = k - 1
End
Else Do
/* Merge multiple adjacent 0-n chars masks to one occurrence */
Do k = i By 1 While Substr(mask,k,1) == '%'
End
x1 = x1 !! Substr(mask,i,1)
If k > i Then i = k - 1
End
End
mask = x1
If mask == '' then Return 0
lm = Length(mask)
ls = Length(string)
i = 1
j = 1
match = 1
Do While match
If i > lm Then m = ''
Else m = Substr(mask,i,1)
If j > ls Then s = ''
Else s = Substr(string,j,1)
If s /== '' Then Do
If m == '%' Then Do
If s == Substr(mask,i + 1,1) Then ,
i = i + 1
Else ,
j = j + 1
End
Else If m == '_' Then Do
Do k = i To lm While Substr(mask,k,1) == '_'
End
j = j + (k - i)
If j > ls Then match = 0
Else ,
i = k
End
Else If m == '' Then Do
If Substr(mask,i - 1,1) == '%' Then ,
j = j + 1
Else match = 0
End
Else If m == s Then Do
i = i + 1
j = j + 1
End
Else match = 0
End
Else Do
If m /== '%' & m /== '' Then match = 0
Else If m == '%' & lm > i Then match = 0
Else Leave
End
End
END_MASK:
Return match
Regards
Thomas Berg
________________________________________________________________
Thomas Berg Specialist z/OS/IT Delivery SWEDBANK AB (Publ)
----------------------------------------------------------------------
For TSO-REXX subscribe / signoff / archive access instructions,
send email to LISTSERV@VM.MARIST.EDU with the message: INFO TSO-REXX
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads