TACL宏执行报错求助:清理创建文件并复制内容的宏问题
哈哈,刚入门TACL踩这个坑太正常啦!我来给你捋清楚问题出在哪,以及怎么解决~
问题根源分析
你遇到的错误提示name is not either variable or built in function,核心原因是对TACL宏的命令调用规则理解错了:
- 在TACL里,
#前缀是专门用来调用TACL内置函数(比如#ECHO、#FILEEXISTS)或者访问TACL变量的; - 而
PURGE、TEDIT、JLIST都是NonStop系统的外部系统命令,根本不需要加#前缀。你加了#之后,TACL会把这些命令当成内置函数/变量去查找,自然找不到就报错了。
修正后的可运行宏代码
把命令前的#全部去掉,就能正常执行你的需求了:
PURGE $A.B.C TEDIT $A.B.C ! JLIST $D.E.F, PUT $A.B.C, NOPRINT
可选优化:让宏更健壮
如果想让你的宏容错性更强(比如避免因文件不存在导致的报错),可以结合TACL的内置功能做一些判断,比如:
#IF #FILEEXISTS($A.B.C) THEN PURGE $A.B.C #ENDIF TEDIT $A.B.C ! #IF #FILEEXISTS($D.E.F) THEN JLIST $D.E.F, PUT $A.B.C, NOPRINT #ELSE #ECHO 错误:源文件 $D.E.F 不存在! #ENDIF
这里的#IF、#FILEEXISTS、#ECHO都是TACL的内置功能,所以需要加#前缀,和外部系统命令区分开。
内容的提问来源于stack exchange,提问作者Christie
相关产品推荐
相关产品推荐

