HP OpenVMS Systemsask the wizard |
The Question is: I'm having a problem with the SORT/SPEC command. I need to remove unwanted records (based on a date/time field) from a file but all input records are propagating to the output file. I could have a DCL procedure read the file, but I figured SORT would be f aster. I use the command; $sort/spec=specfile infile outfile The input file contains: 7 district names loaded. 123456789-123456789-123456789- this line is to count columns MIM00326004061102003030319551 MIM00326005002702003030119551 MIM00326005002702003030319551 NSI12016003001012003030320154 NSI12016009601022003030320154 SOM11323001806062003030320401 SOM11323010806072003030322444 SLM00228714001562003030320074 SLM00216006603062003030319301 NRM01224005107202003030401184 NRM01224011909132003030323564 SJC11505860405872003030316331 SJC11505862806712003030316131 The specification file contains: /pad=%x20 /field=(name=district,position:1,size:6,character) /field=(name=unitid,position:7,size:10,character) /field=(name=datetime,position:17,size:12,CHARACTER) /field=(name=unitype,position:29,size:1,character) /field=(name=today,value:"200303051200",size:12,character) / field=(name=tomorrow,value:"200303061200",size:12,character) /condition=(name=istoday,test=(datetime ge today)) /condition=(name=istomorrow,test=(datetime le tomorrow)) /condition=(name=nottoday,test=(datetime lt today)) /condition=(name=nottomorrow,test=(datetime gt tomorrow)) /include=(condition=istoday) /include=(condition=istomorrow) /omit=(condition=nottoday) /omit=(condition=nottomorrow) I've tried the spec file with all upper case, switched "=" for ":" and no change; all input data goes to the output file. I am not using high performance sort, either. Any ideas? Thanks! Dave The Answer is :
Your SORT command already looks rather complex, and the OpenVMS
Wizard is not entirely certain which records you seek to select.
The OpenVMS Wizard would use DCL, or would write a simple program
in C or Perl or such.
One possible problem with your example is that the values for both
today and tomorrow are larger than all data values in your input
file, for the datetime field.
That said, if you are trying to select records whose datetime field
falls between two values, here is one way to do that.
$ create s217.in
MIM00326004061102003030319551
MIM00326005002702003030119551
MIM00326005002702003030319551
NSI12016003001012003030320154
NSI12016009601022003030320154
SOM11323001806062003030320401
SOM11323010806072003030322444
SLM00228714001562003030320074
SLM00216006603062003030319301
NRM01224005107202003030401184
NRM01224011909132003030323564
SJC11505860405872003030316331
SJC11505862806712003030316131
$ create s217.spc
/pad=%x20
/field=(name=district,position:1,size:6,character)
/field=(name=unitid,position:7,size:10,character)
/field=(name=datetime,position:17,size:12,CHARACTER)
/field=(name=unitype,position:29,size:1,character)
/field=(name=today, value:"200303031200",size:12,character)
/field=(name=tomorrow,value:"200303041200",size:12,character)
/condition=(name=between,test=((datetime ge today)
and (datetime le tomorrow)))
/include=(condition=between)
$ sort/spec=s217.spc s217.in s217.out
$ exit
When using /condition with a compound condition, please make certain
to specify the test with an outer enclosing set of parentheses
test=((datetime ge today) and (datetime le tomorrow))
instead of as follows
test= (datetime ge today) and (datetime le tomorrow)
SORT32 currently does not give a diagnostic in the 2nd
case to warn that 'and (datetime le tomorrow)' is ignored
http://h71000.www7.hp.com/doc/731FINAL/6652/6652pro_010.html#sort
And as stated, selection with DCL might well be easier to maintain.
|