![]() |
![]() 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.
|