COBOL代码用html实体替换字符

时间:2014-09-28 21:06:25

标签: html cobol

我想替换字符'<'和'>' <>与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 "&lt;" TO OUTTXT(P:4)
                ADD 4 TO P
            WHEN '>'
                MOVE "&gt;" 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
    .

2 个答案:

答案 0 :(得分:1)

GnuCOBOL(是的,另一个名称品牌变更)有一个内在的函数扩展,FUNCTION SUBSTITUTE。

move function substitute(inptxt, ">", "&gt;", "<", "&lt;") 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部分。

否则,是的,它将归结为循环数据。一旦你澄清了你想要什么,你可以得到一些例子,如果你仍然需要它们。