如何使用DCL搜索文件中的文本?是的,我必须使用DCL。如何使用DCL搜索文件中的文本
的文件格式是直截了当:
<NUMBER OF ENTRIES>
<ID> <DIRECTORY>
<ID> <DIRECTORY>
.
.
.
<ID> <DIRECTORY>
它们是由几个空格字符分隔。我只需要在文件中搜索给定的ID并提取DIRECTORY。
这是一个非常简单的任务,但我似乎无法在任何地方找到任何体面的DCL文档。
如何使用DCL搜索文件中的文本?是的,我必须使用DCL。如何使用DCL搜索文件中的文本
的文件格式是直截了当:
<NUMBER OF ENTRIES>
<ID> <DIRECTORY>
<ID> <DIRECTORY>
.
.
.
<ID> <DIRECTORY>
它们是由几个空格字符分隔。我只需要在文件中搜索给定的ID并提取DIRECTORY。
这是一个非常简单的任务,但我似乎无法在任何地方找到任何体面的DCL文档。
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
好运 海恩
或者,如果ID字段看起来像固定宽度,那么您可以将该文件转换为RMS INDEXED,并将其键入ID字段。然后你可以通过调用READ/KEY='ID'
来查找。
打电话给CONVERT,READ/KEY或者SEARCH/KEY帮助
HELP SEARCH是否为你做了什么?使用'/ OUTPUT'将结果写入文件,然后'OPEN'和'READ'。或者,对于一个更可靠的方法,在跳过第一行后,只需“打开”和“读取”源文件并将每行解析为“ID”和“DIRECTORY”。当你完成时要保持礼貌和“CLOSE”。 – HABO
http://www.bing.com/search?q=dcl+vms+manual –
@ user92546恕我直言,您的评论可能是一个答案。 –