我想替换字符'&lt;'和'&gt;' <
和>
与COBOL。我想知道INSPECT语句,但看起来这个语句只能用于将一个char转换为另一个。我的目的是用他们的html实体替换所有html字符。
有人能想出办法吗?也许循环遍历字符串并测试每个字符是唯一的方法吗?
欢迎使用GnuCOBOL或IBM COBOL示例。
我最好的代码是这样的:(http://ideone.com/MKiAc6)
IDENTIFICATION DIVISION.
PROGRAM-ID. HTMLSECURE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 INPTXT PIC X(50).
77 OUTTXT PIC X(500).
77 I PIC 9(4) COMP VALUE 1.
77 P PIC 9(4) COMP VALUE 1.
PROCEDURE DIVISION.
MOVE 1 TO P
MOVE '<SCRIPT> TEST TEST </SCRIPT>' TO INPTXT
PERFORM VARYING I FROM 1 BY 1
UNTIL I EQUAL LENGTH OF INPTXT
EVALUATE INPTXT(I:1)
WHEN '<'
MOVE "<" TO OUTTXT(P:4)
ADD 4 TO P
WHEN '>'
MOVE ">" TO OUTTXT(P:4)
ADD 4 TO P
WHEN OTHER
MOVE INPTXT(I:1) TO OUTTXT(P:1)
ADD 1 TO P
END-EVALUATE
END-PERFORM
DISPLAY OUTTXT
STOP RUN
.
答案 0 :(得分:1)
GnuCOBOL(是的,另一个名称品牌变更)有一个内在的函数扩展,FUNCTION SUBSTITUTE。
move function substitute(inptxt, ">", ">", "<", "<") to where-ever-including-inptxt
采用主题字符串,以及模式和替换对。 (这不是正则表达式模式,直接文本匹配)。有关更多详细信息,请参阅http://opencobol.add1tocobol.com/gnucobol/#function-substitute。模式和替换都可以有不同的长度。
当内部函数返回匿名COBOL字段时,函数的结果可用于覆盖主题字段,而不用担心滑动重叠或其他“读取时更改”问题。
答案 1 :(得分:0)
COBOL是一种固定长度字段的语言。所以不,INSPECT
无法做你想做的事。
如果您需要为IBM大型机提供此服务,那么您的SORT产品(假设已足够最新)可以使用FINDREP
执行此操作。
如果你看看Enterprise COBOL中的XML处理可能性,你会发现它们完全符合你的想法(我猜)。 GnuCOBOL还可以轻松地与许多其他东西进行交互。如果您正在编写GnuCOBOL以在非大型机上运行,我建议您询问SourceForge的GnuCOBOL部分。
否则,是的,它将归结为循环数据。一旦你澄清了你想要什么,你可以得到一些例子,如果你仍然需要它们。