2012-06-28 40 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幫助