1

DCL を使用してファイル内のテキストを検索するにはどうすればよいですか? はい、DCL を使用する必要があります。

ファイル形式は簡単です。

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

それらはいくつかの空白文字で区切られています。特定の ID のファイルを検索し、DIRECTORY を抽出するだけです。

これは非常に単純な作業ですが、まともな DCL ドキュメントがどこにも見つからないようです。

4

2 に答える 2

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

頑張れヘイン

于 2012-06-28T14:25:50.597 に答える
1

あるいは、ID フィールドが固定幅のように見える場合は、ファイルを ID フィールドをキーとする RMS INDEXED に変換することもできます。次に、 を呼び出すだけでルックアップを実行できますREAD/KEY='ID'

CONVERT 、 READ /KEY 、およびおそらく SEARCH /KEY で HELP を呼び出します

于 2012-10-11T23:18:36.883 に答える