用nothing / null替换值

时间:2016-11-08 08:19:07

标签: cobol

我有一个带分隔符的文本文件(比如#RT#,#LT#,#BC#等)需要删除。

例如: -

原文:欠税:#RT#$ 3000

修正版:欠税:$ 3000

替换为SPACES显然不起作用,因为它放入空格 - 因为这将是一个计算机读取文件 - 它需要是精确的 - 只有/ null才会这样做。

有什么想法吗?

以上是数据的代表性样本......其中包含#RT#和#LT#的随机数据段。目前,使用具有SPACES的REPLACING。但我需要完全删除它,如上例所示。因为我在路上,所以不能将代码发布到明天。

1 个答案:

答案 0 :(得分:4)

INSPECT yourtext REPLACING BY SPACES留下空格。不允许INSPECT yourtext REPLACING BY ""(两者都需要相同的长度或替换标识符是一个图形常量:SPACE [S],ZERO [S | ES]或QUOTE [S]) - 一个好的编译器将输出一个如果你试试这个可以理解的消息。

这只留下3个选项:

  • 不要使用COBOL(如果你不想对文本文件做任何其他事情,那将是#1选项),而不是系统调用,例如sed -e 's/#RT#//g' yourfile > yourtarget,具体取决于COBOL您使用的运行时(在问题中添加此信息总是一个好主意!)您可以通过COBOL CALL "SYSTEM" USING external-command启动该过程。

  • READ数据,使用特定于您的运行时的扩展来翻译它(例如使用GnuCOBOL:MOVE FUNCTION SUBSTITUTE (yourtext, '#RT#', '', '#LT#'. '') TO translated-text) - 可能是FUNCTION,系统库{ {1}} - 以及CALL数据。

  • 旧的COBOL方式 - 见下文。

由于问题不在于阅读数据或将数据写回来,这只是替换部分:

选项a): UNSTRING声明

WRITE

选项b)一个简单的 MOVE 0 TO t1, t2, t3, t4 UNSTRING yourtext DELIMITED BY ALL '#RT#' OR ALL '#LT#' OR ... INTO target-1 COUNT IN t1 target-2 COUNT IN t2 target-3 COUNT IN t3 target-4 COUNT IN t4 ... END-UNSTRING MOVE SPACES TO translated-text STRING target-1 (1:t1) target-2 (1:t2) target-2 (1:t2) target-2 (1:t2) ... DELIMITED BY SIZE INTO translated-text END-STRING ,带有两个指针,并附带一个简单的 PERFORM VARYING 语句。

IF