2014-03-31 61 views
1

我嘗試使用單獨的字母在Cobol中創建一個字符串。直到我嘗試插入 空間,一切正常。你有什麼想法,我如何創建e.x.字符串如何將空格與字母組合

" ee ee" 

IDENTIFICATION DIVISION. 
    PROGRAM-ID. EXAMPLE. 
    DATA DIVISION. 
    WORKING-STORAGE SECTION. 

    01 S1 PIC X(10). 

    PROCEDURE DIVISION. 
    MAIN-PARAGRAPH. 

    Perform InsertSpace 2 Times 
    Perform InsertE 2 Times 
    Perform InsertSpace 2 Times 
    Perform InsertE 2 Times 

    Display S1 
* expectation " ee ee" 
    End-Main 

    InsertE Section 
    STRING S1 DELIMITED BY SPACE 
     'e'  DELIMITED BY SIZE 
      INTO S1 
     END-STRING 

    InsertSpace Section 
    STRING S1 DELIMITED BY SPACE 
     ' '  DELIMITED BY SIZE 
      INTO S1 
     END-STRING 
+0

您可能還想嘗試初始化s1以空格。它一開始可能會有十六進制零。另外什麼是輸出 –

+0

GNU Cobol增加了一個擴展內部的'FUNCTION CONCATENATE()',這在運行時建立字符串時非常方便。這不是一個答案,只是一個評論。 –

回答

4

如果你想實現,其中一次一個字符添加到 字符變量的過程,然後像下面這樣可能工作好一點你:

IDENTIFICATION DIVISION. 
    PROGRAM-ID. EXAMPLE. 
    DATA DIVISION. 
    WORKING-STORAGE SECTION. 
    01 S1    PIC X(10) VALUE SPACE. 
    01 S1-SUB   PIC S9(4) BINARY VALUE ZERO. 
    PROCEDURE DIVISION. 
     PERFORM INSERT-SPACE 2 TIMES 
     PERFORM INSERT-E  2 TIMES 
     PERFORM INSERT-SPACE 2 TIMES 
     PERFORM INSERT-E  2 TIMES 
     DISPLAY '>' S1 '<' 
     GOBACK 
     . 
    INSERT-SPACE SECTION. 
     COMPUTE S1-SUB = S1-SUB + 1 
     MOVE SPACE TO S1 (S1-SUB : 1) 
     . 
    INSERT-E SECTION. 
     COMPUTE S1-SUB = S1-SUB + 1 
     MOVE 'E' TO S1 (S1-SUB : 1) 
     . 

S1-SUB保持當前字符位置的區域,並且每次執行一個區域添加另一個字符時會增加 。

上述程序顯示:> EE EE <

通知的尾部空格?如果你不想這些,適當的顯示是:

DISPLAY '>' S1 (1 : S1-SUB) '<' 

將顯示器的長度僅限定於那些你已經明確地放入不同的特性。 COBOL不支持可變長度字符串,因此您必須聲明一些PIC X類型變量,該變量可以保存要顯示的最大字符數,然後記錄您實際「使用」了多少個字符,並只顯示多少字符。

如果這是你正在尋找的東西,我還建議檢查 的邊界錯誤(即添加太多的字符)。可以這樣做:

INSERT-E SECTION. 
     COMPUTE S1-SUB = S1-SUB + 1 
     IF S1-SUB > LENGTH OF S1 
      PERFORM ERROR-ROUTINE 
     END-IF 
     MOVE 'E' TO S1 (S1-SUB : 1) 
     . 
3
MOVE " ee ee" TO S1 

會做你想要什麼。

這是很難確定,因爲你不顯示什麼結果你得到的,目前還不清楚是什麼「直到我嘗試插入一個空間,一切正常」的意思,但是......

01 S1 PIC X(10) VALUE SPACE. 

如果S1沒有VALUE(並且假定您沒有使用編譯器來設置圖片的默認值),則DELIMITED BY SPACE將佔用整個10個字節,但STR中添加的值不會出現在S1中,除非它以SPACE的值開始。有了SPACE的價值,你的四個STRING應該可以工作。呃...不,不會,因爲空間和DELIMITED BY SPACE。

您還可以使用參考修飾,當然:

MOVE " " TO S1 (1 : 2) 
MOVE "ee" TO S1 (3 : 2) 
MOVE " " TO S1 (3 : 2) 
MOVE "ee" TO S1 (5 :) 

或者,如果你不想墊場的最後一部分,默認情況下空間,改變過去以(5: 2),這將保留S1的字節9和10不變。

如果你可以澄清你想達到什麼目的,爲什麼你認爲STRING是用來做它的動詞,你可能會得到更好的答案。

相關問題