2012-06-28 29 views
1

如何使用DCL搜索文件中的文本?是的,我必须使用DCL。如何使用DCL搜索文件中的文本

的文件格式是直截了当:

<NUMBER OF ENTRIES> 
<ID> <DIRECTORY> 
<ID> <DIRECTORY> 
. 
. 
. 
<ID> <DIRECTORY> 

它们是由几个空格字符分隔。我只需要在文件中搜索给定的ID并提取DIRECTORY。

这是一个非常简单的任务,但我似乎无法在任何地方找到任何体面的DCL文档。

+1

HELP SEARCH是否为你做了什么?使用'/ OUTPUT'将结果写入文件,然后'OPEN'和'READ'。或者,对于一个更可靠的方法,在跳过第一行后,只需“打开”和“读取”源文件并将每行解析为“ID”和“DIRECTORY”。当你完成时要保持礼貌和“CLOSE”。 – HABO

+0

http://www.bing.com/search?q=dcl+vms+manual –

+0

@ user92546恕我直言,您的评论可能是一个答案。 –

回答

1
Edited.... the forum 'eats' strings like <xx> unless marked as code.  

数据线上是否有尖括号? 请提供一个真实的例子 是 或:XX XXX-DIRECTORY

我假设第一个。

VMS因为它没有标准的工具来从记录中选择一个字段。 但是有很多标准工具可用于OpenVMS,可以做到这一点。 晴尤其是(G)AWK和PERL 就这样,我会用什么:

$ gawk /comm="$1 == ""<xx>"" { print $2 }" tmp.tmp 
<xxx-DIRECTORY> 

$ perl -ne "print $1 if /^\s*<xx>.*?<([^>]*)/" tmp.tmp 
xxx-DIRECTORY 

那些可以增强对案件和空间灵敏度,根据需要和装饰件<>根据需要。 也许你需要将搜索ID作为参数或不需要。

无论如何,在纯DCL脚本它可能看起来像....

$ IF p2.eqs."" then exit 16 
$ CLOSE/NOLOG file 
$ OPEN/READ file 'p1 
$loop: 
$ READ/END=done file rec 
$ id = F$EDIT(F$ELEM(0,">",F$ELEM(1,"<",rec)), "UPCASE") 
$ IF id.NES.p2 THEN GOTO loop 
$ dir = F$ELEM(0,">",F$ELEM(2,"<",rec)) 
$ WRITE SYS$OUTPUT dir 
$ GOTO loop 
$done: 
$CLOSE/NOLOG file 

如果<>不存在,用这个核心...

$ rec = F$EDIT(rec,"TRIM,COMPRESS") 
$ id = F$EDI(F$ELEM(0," ",rec),"UPCASE") 
$ IF id.NES.p2 THEN GOTO loop 
$ dir = F$ELEM(1," ",rec) 

而Perl的将是:

$ perl -ne "print $1 if /^\s*<xx>\s+(\S+)/" tmp.tmp 

好运 海恩

+1

尖括号不是日志文件的一部分,但是这让我走上了正确的轨道,谢谢!对于任何人在未来搜索这个,下面可能是有用的: F $ EDIT,F $ LENGTH,F $ EXTRACT,F $ LOCATE,F $ ELEM(F $ EDIT有几个参数有助于摆脱的空白) – BobbyA

+0

Upvote for“substring”提取字段。这是OP所要求的。查找记录已成定局。 – mckenzm

1

或者,如果ID字段看起来像固定宽度,那么您可以将该文件转换为RMS INDEXED,并将其键入ID字段。然后你可以通过调用READ/KEY='ID'来查找。

打电话给CONVERT,READ/KEY或者SEARCH/KEY帮助