字符串替换工具CHANGE.EXE应用六例

Author: 方新沪 Date: 1997-01-01

  凡字处理软件,几乎都有字符串替换功能,因而很少有人关注各种专用的字符串替换工具。其实后者往往功能更强,可以在不打开文件的情况下,用替换操作完成许多人们原先无法想象的工作。本文以美国人JOHN W.CLINTEN的CHANGE.EXE为例,介绍笔者使用中的几个实例。CHANGE的命令行格式是:
  CHANGE 文件名列表 原串,新串…/参数
#3  一、对多个文件中的多个字符串进行一次性替换。
  例:CHANGE *.DBF,*.PRG'序号','编号' '工龄','年龄'
  本命令将当前目录中FOXBASE下工资程序的各数据库文件和命令文件中字段名“序号”和“工龄”一次性全部改为“编号”和“年龄”,程序即可正常运行,而不必分别使用MODI STRU和MODI COMM命令对数据库和程序进行修改。但要求原字段名和新字段名字节数要相等,否则将破坏数据库。
#3  二、删除字符串。
  例:CHANGE UNITLIST.'幼儿园',"xlh
  表示新串的前后引号之间不能有空格。文件名后的圆点不能省略,否则也对当前目录中文件名相同但扩展名不同的所有文件作同样操作。
#3  三、如替换内容很多,且相同的替换操作以后还会用到,可使用间接参数文件,长度可超过64K。例:间接参数文件NEW_ADDR.IND内容:
  !更改通讯录的间接参数文件
  '石油天然气管道二公司','徐州管道二公司'
  '中学一级教师','中学高级教师'
  命令行句法:CHANGE 文件列表 @NEW_ADDR.IND
#3  四、给文本文件或源程序加行或删行。
  CHANGE也可对控制字符和扩展ASCII字符进行替换,表示方法之一是以“#”引导这些字符的三位ASCII码,如“#013”为回车符,“#010”为换行符。下面是对Foxpro源程序进行加行的一个实例:
  CHANGE *.PRG 'SET TALK OFF#013#010','SET TALK OFF#013#010SET CENT ON#013#010'/SUBDIR
  此命令对当前目录和所有下级子目录中的.PRG文件进行操作,在文件开头的SET TALK OFF下加上一句SET CENT ON,以便用四位数字显示数据库日期字段的年份。
  如要删掉程序中“SET CARR ON”一行,则执行命令:
  CHANGE 文件列表 'SET CARR ON#013#010',"xlh
#3  五、处理打印控制符。
  如果一篇用CCED编辑的文章中有许多M的平方,要反复输入“上标开始”与“上标结束”,十分麻烦。可建立下面的批文件M2.BAT,内容如下:
  @ECHO OFF
  CHANGE %1 'M2','M#148#1342#148#135'
  其中“#148#134”与“#148#135”分别为CCED的上标开始和结束的控制符。先在文章中输入M2代替M的平方,退出后执行命令“M2 文件名”进行替换。
#3  六、改变文本文件格式。
  CCED的软回车由扩展ASCII码为141和138的两个字符组成;进行段落重排时,为使左右对齐,有时会在字间插入十进制值为127的扩展ASCII字符以拉开距离。如果用Word以纯文本格式调用原由CCED建立的文本文件,这些在CCED编辑屏幕上的不可见字符就变为可见的乱码。要解决这个问题,可建立批文件CCD2WRD.BAT,内容如下:
  @ECHO OFF
  CHANGE %1'#127',"xlh '#141#138',"xlh
  先用“CCD2WRD 文件名”命令删掉CCED文件中的软回车与字间空格符,就可用Word将它调入,顺利进行编辑、打印了。
  为避免误操作,使用CHANGE时,可加/CO参数和/SH参数,在替换操作执行前会分别显示各匹配文件的文件名和每一匹配字符串的15行上下文,以等待用户确认。