I found a way to do it with compiled dictionary elements (on UV).

1- I create a dictionnary element called EGREP.ARGS that always returns "X":
0001: I
0002: "X"[1,1]
0003:
0004: EGREP.ARGS
0005: 1L
0006: M

2- I create a dictionnary element called "EGREP" which is defined like this:
0001: I
0002: SUBR("DICT.EGREP",@RECORD,@ID,@SENTENCE)
0003:
0004: EGREP
0005: 40L
0006: M

DICT.EGREP is defined like this:
SUBROUTINE DICT.EGREP(OUT,RECORD,ID,SENTENCE)
COM /WORKF/WORKF
IF FILEINFO(WORKF,0) = 0 THEN
   OPEN "", "WORK.FILE" TO WORKF ELSE STOP 201, "WORK.FILE" ;* A type 19 file 
on Universe (pointer to a directory)
END
STATUS STAT FROM WORKF ELSE STOP
PATH = STAT<27>

*--- Extract the arguments for egrep from cmd line ---*
ARG.PFX   = "EGREP.ARGS NE "
POS.EGREP = INDEX(SENTENCE,ARG.PFX,1) + LEN(ARG.PFX) + 1
EGREP.ARG = SENTENCE[POS.EGREP,LEN(SENTENCE)-POS.EGREP+1]
EGREP.ARG = EGREP.ARG[1,INDEX(EGREP.ARG,"EGREP",1)-1]
EGREP.ARG = CONVERT('"','',EGREP.ARG)

TMP.KEY = "egrep.tmp" ;* Using temporary key not ID to avoid problems (ei: 
spaces, parentheses etc)
WRITE RECORD ON WORKF, TMP.KEY   ;* Write rec to temp. file

CMD = "cd ":PATH:" ; egrep ":EGREP.ARG:" ":TMP.KEY
EXECUTE "SH -c ":QUOTE(CMD) CAPTURING OUT
DELETE WORKF, TMP.KEY            ;* Remove record
RETURN

This is how I do my search:

LIST MYFILE WITH EGREP.ARGS NE "-in blahblah" EGREP


(This will do the equivalent of   egrep -in blahblahblah MYFILE if MYFILE was a 
type 19 file)

This method writes only one record at a time and deletes it so while it is slow 
(1 write + a sh executed per record), it will work with limited space available 
and it uses the Unix egrep command.  The arguments to the egrep command are 
parsed from the sentence between  EGREP.ARGS NE and EGREP.   






----- Original Message ----
From: Dan McGrath <dmc...@imb.com.au>
To: U2 Users List <u2-users@listserver.u2ug.org>
Sent: Mon, March 29, 2010 5:13:00 PM
Subject: Re: [U2] Regex searching UD files

Not even close... We run in ECLTYPE P and don't have access to EVAL and
the like.

"^[Cc][Hh][Qq].*[5-8][0-9][0-9][0-9]x"

Unless you can explain how to duplicate the above search with ESEARCH?

@Stuart, that would be ideal, but unfortunately I can't go dumping out
multi-gigabyte files. :(



-----Original Message-----
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Wally Terhune
Sent: Tuesday, 30 March 2010 5:22 AM
To: U2 Users List
Subject: Re: [U2] Regex searching UD files

Does UniData ECL ESEARCH command not fill the bill already?

Wally Terhune
U2 Support Architect
Rocket Software
4700 S. Syracuse Street, Suite 400 **Denver, CO 80237 **USA
Tel: +1.720.475.8055
Email: wterh...@rs.com
Web: www.rocketsoftware.com/u2

-----Original Message-----
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Boydell,
Stuart
Sent: Monday, March 29, 2010 12:22 AM
To: U2 Users List
Subject: Re: [U2] Regex searching UD files

I think this should be one for Rocket to implement a RegexSearch in U2. 
However, if it's size non-impactive, what I would normally do is copy
the file to a temporary directory then run grep across that.

Stuart Boydell 

-----Original Message-----
From: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Dan McGrath
Sent: Monday, 29 March 2010 17:08
To: U2 Users List
Subject: [U2] Regex searching UD files

I've written a small utility to be able to run egrep on a UD file (not
UD directory), however its implementation is not ideal.



Essentially, I select the file I'm searching, writing each record one at
a time to a temp UNIX file and running egrep on it as follows



            !egrep -q -f MyTempRegexFile MyTempRecordFile ; echo $?



Where MyTempRegexFile is a file containing the desired regex pattern
stored earlier and MyTempRecordFile is a file name unique to each user.



My problem with it is that I have to do a READ on each record, followed
by a WRITE then have egrep read it in as well. That's a lot of seemingly
unneeded disk IO if I could only stream the record to egrep without have
to do a WRITE after the READ.



Any ideas? I feel I'm missing something quite obvious.



Regards,

Dan


########################################################################
###################
The information transmitted in this message and attachments (if any) is
intended only
for the person or entity to which it is addressed. The message may
contain confidential
and/or privileged material.  Any review, retransmission, dissemination
or other use of
or taking of any action in reliance upon this information by persons or
entities other
than the intended recipient is prohibited.  If you received this in
error, please
contact the sender and delete the material from any computer.

The intended recipient of this e-mail may only use, reproduce, disclose
or distribute
the information contained in this e-mail and any attached files with the
permission of IMB.
########################################################################
###################
_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users
_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
______________________________________________________________________
###########################################################################################
The information transmitted in this message and attachments (if any) is 
intended only
for the person or entity to which it is addressed. The message may contain 
confidential
and/or privileged material.  Any review, retransmission, dissemination or other 
use of
or taking of any action in reliance upon this information by persons or 
entities other
than the intended recipient is prohibited.  If you received this in error, 
please
contact the sender and delete the material from any computer.

The intended recipient of this e-mail may only use, reproduce, disclose or 
distribute
the information contained in this e-mail and any attached files with the 
permission of IMB.
###########################################################################################
_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users



      
_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

Reply via email to