我有一个带分隔符的文本文件(比如#RT#,#LT#,#BC#等)需要删除。
例如: -
原文:欠税:#RT#$ 3000
修正版:欠税:$ 3000
替换为SPACES显然不起作用,因为它放入空格 - 因为这将是一个计算机读取文件 - 它需要是精确的 - 只有/ null才会这样做。
有什么想法吗?
以上是数据的代表性样本......其中包含#RT#和#LT#的随机数据段。目前,使用具有SPACES的REPLACING。但我需要完全删除它,如上例所示。因为我在路上,所以不能将代码发布到明天。
答案 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