2017-08-21 61 views
0

我編寫了下面的代碼,它將提取目錄名和文件名,我將在該提取的文本上使用purge命令。如何在DCL輸出中編輯文本 - OpenVMS腳本

$ sear VAXMANAGERS_ROOT:[PROC]TEMP.LIS LOG/out=VAXMANAGERS_ROOT:[DEV]FVLIM.TXT 
$ OPEN IN VAXMANAGERS_ROOT:[DEV]FVLIM.TXT 
$ LOOP: 
$ READ/END_OF_FILE=ENDIT IN ABCD 
$ GOTO LOOP 
$ ENDIT: 
$ close in 
$ ERROR=F$EXTRACT(0,59,ABCD) 
$ sh sym ERROR 
$ purge/keep=1 'ERROR' 

輸出如下:

ERROR = "$1$DKC102:[PROD_LIVE.LOG]DP2017_TMP2.LIS;27392    " 

問題這裏是---每次目錄長度變化(長度可以是59或40或一些其它值,但目錄和文件名長度在我的系統中不會超過59個字符)。所以在上面的輸出中,系統也獲取該文件編號的版本號。所以我無法清除文件以及版本號。

%PURGE-E-PURGEVER, version numbers not permitted 

任何建議 - 如何從輸出中消除版本號?

我不能使用目錄的確切長度,如目錄長度每次變化.... :(

+2

使用['f $ parse'](http://h41379.www4.hpe.com/doc/83final/9996/9996pro_111.html)提取文件規範的相應部分。或'f $ element'來獲取分號前的部分。 (一個版本可以用分號或點分隔,Sneaky)或者'f $ locate'來獲得用於'f $ extract'的分號的位置。 – HABO

+0

嗨Habo ..請告訴我如何在這種情況下使用F $ ELEMENT或F $ PARSE ... –

+1

它看起來像'f $ element(0,「;」,ABCD)'應該返回分號。我現在並不需要有一個真正的VMS系統。 IIRC,'寫入Sys $輸出'f $ element(0,「;」,ABCD)''會顯示結果。 – HABO

回答

1

與F $ ELEMENT答案(0, 「」,ABCD)應該工作,經確認。我可能會編寫如下腳本:

$ ERROR = F$PARSE(";",ERROR) ! will return $1$DKC102:[PROD_LIVE.LOG]DP2017_TMP2.LIS; 
$ ERROR = ERROR - ";" 
$ PURGE/KEEP=1 'ERROR' 

不確定爲什麼你有讀取循環。你會得到的是文件中的最後一行,但假設這就是你想要的。

1

雖然哈勃解釋它,一些更多的解釋

想我使用f $搜索檢查文件存在

a = f$search("sys$manager:net$server.log")

然後我發現我存在

wr sys$output a

顯示

SYS$SYSROOT:[SYSMGR]NET$SERVER.LOG;9

從F $解析的幫助下,我得到

help lex f$parse arg

顯示,除其他事項外

`指定包含的名稱的字符串文件說明中的字段 。指定字段參數會導致 F $ PARSE函數返回文件 規範的特定部分。

 Specify one of the following field names (do not abbreviate): 

    NODE  Node name 
    DEVICE  Device name 
    DIRECTORY Directory name 
    NAME  File name 
    TYPE  File type 
    VERSION File version number` 

所以我可以做

wr sys$output f$parse(a,,,"DEVICE")

這表明

SYS$SYSROOT:

wr sys$output f$parse(a,,,"DIRECTORY")

,所以我得到

[SYSMGR]

wr sys$output f$parse(a,,,"NAME")

顯示

NET$SERVER

wr sys$output f$parse(a,,,"TYPE")

顯示

.LOG

版本是

wr sys$output f$parse(a,,,"VERSION")

示爲

;9

的詞法功能可以很方便的,檢查它使用

help lexical

它顯示

F$CONTEXT F$CSID F$CUNITS F$CVSI F$CVTIME F$CVUI F$DELTA_TIME F$DEVICE F$DIRECTORY F$EDIT F$ELEMENT F$ENVIRONMENT F$EXTRACT F$FAO F$FID_TO_NAME F$FILE_ATTRIBUTES F$GETDVI F$GETENV F$GETJPI F$GETQUI F$GETSYI F$IDENTIFIER F$INTEGER F$LENGTH F$LICENSE F$LOCATE F$MATCH_WILD F$MESSAGE F$MODE F$MULTIPATH F$PARSE F$PID F$PRIVILEGE F$PROCESS F$READLINK F$SEARCH F$SETPRV F$STRING F$SYMLINK_ATTRIBUTES F$TIME F$TRNLNM F$TYPE F$UNIQUE F$USER