2014-09-28 81 views
0

我想用COBOL替換字符'<'和'>'的&lt;&gt;。我想知道INSPECT語句,但是看起來這個語句可以用來將一個字符轉換成另一個字符。我的意圖是用他們的html實體替換所有的html字符。用html實體替換字符的COBOL代碼

任何人都可以找出一些辦法嗎?也許循環遍歷字符串並測試每個字符是唯一的方法?

歡迎使用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 
    . 
+0

我認爲你需要澄清你想要做什麼。目前,你似乎不想做任何事情(改變>和<到<)。你能展示一些有代表性的樣本輸入和期望的輸出嗎 – 2014-09-28 21:53:52

+0

我通過查看編輯來制定如何顯示你想要的內容,我包括反向代碼以及合併來阻止它們被直接處理。現在可以看到你在做什麼。 – 2014-09-28 22:39:58

+0

您接受的建議的各種解決方案的哪一部分? :-) – 2014-09-29 00:17:17

回答

0

COBOL是固定長度字段的語言。所以不,INSPECT是不會做你想做的。

如果您需要IBM Mainframe的這款產品,您的SORT產品(假設足夠新)可以使用FINDREP來實現。

如果您查看Enterprise COBOL中的XML處理可能性,您將看到它們正是您想要的(我猜)。 GnuCOBOL也可以很容易地與其他許多東西進行交互。如果您正在編寫GnuCOBOL以在非大型機上運行,​​我建議您在SourceForge的GnuCOBOL部分上提問。

否則,是的,它會降低循環數據。一旦你澄清了你想要的更多,你可能會得到這樣的例子,如果你仍然需要它們。

+0

SORT不會幫助,因爲它應該在線。最後的成就是在任何COBOL編譯器下編譯的代碼。 – 2014-09-29 00:49:10

1

GnuCOBOL(是的,另一個品牌品牌變化)有一個內在的功能擴展,功能替代品。

move function substitute(inptxt, ">", "&gt;", "<", "&lt;") to where-ever-including-inptxt 

拍攝主題字符串,以及模式和替換對。 (這不是正則表達式模式,直接起來了文本匹配)。有關更多詳細信息,請參閱http://opencobol.add1tocobol.com/gnucobol/#function-substitute。模式和替換可能都是不同的長度。

由於內部函數返回匿名COBOL字段,函數的結果可用於覆蓋主題字段,而不用擔心滑動重疊或其他「讀取時改變」問題。

+0

不錯。可憐的可移植性,但仍然不錯。 – 2014-10-02 18:52:07