2017-08-21 40 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