當在一個字符串的說法,比喻常SPACE(使用或空間,它們是等效的,複數意味着什麼,除了人讀取)具有一個字節的長度。
您可能未完成此操作。如果您的源字段包含嵌入的空格,則最好放棄STRING並執行其他操作。
如果您繼續使用STRING或有其他時間想要考慮使用它,那麼您還必須考慮輸出字段的長度。如果你沒有做任何事情,它會被安靜地截斷。
我已經包含了一個如何做某事的例子。請注意,STRING現在具有一個條件元素(ON),所以您必須通過END-STRING(也可能,但很俗氣,以全站/句點)劃分STRING的範圍。
如果在邏輯上不能破壞輸出,則不需要ON OVERFLOW。另外,如果你被告知要做的只是「截斷」,那麼它可以被省略,儘管我傾向於至少對它們進行計數,並在程序結束時顯示計數。然後,當分析師說,「不會有任何,只是截斷,如果有的話」,你可以回去說,當你進行音量測試時,有3931。
正如ScottNelson在評論中指出的那樣,STRING有幾個值得注意的地方。這裏所關心的是,只有STRING選擇的數據纔會出現在輸出字段中,您的輸出字段將爲而不是爲空格填充,因爲它在MOVE語句之後。
因爲到目前爲止您一直在使用固定長度的字段,所以您不會注意到這一點。一旦你有了修正,你可能會發現,如果你沒有把輸出字段設置爲空格,你會得到一個混合的值,剩下的內容就是一些。
另一個與STRING是指針。
如果這是您想要的,STRING方式的效果非常有用。當你不想要這樣的行爲時,你只需要知道該怎麼做才能避免這些事情。
每當您在COBOL中發現新內容時,請點擊該手冊。語言參考第一。試着去了解。編程指南。嘗試更多。如果不確定,試驗。閱讀手冊。實驗。繼續直至被理解。
每次我閱讀手冊時,我都會嘗試着去看看別的東西。一種瞭解語言的技巧就是知道可以完成的事情的類型,知道在哪裏找到細節,以及如何理解解釋。
你會發現與所有「複雜」的COBOL動詞類似的東西,STRING,UNSTRING,INSPECT。他們的行爲似乎最初對你有效,但在你需要時,這些行爲是有用的,否則不可用。
IDENTIFICATION DIVISION.
PROGRAM-ID. DOUGH.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PART-1 PIC X(30) VALUE "TEST".
01 PART-2 PIC X(30) VALUE "TEST".
01 PART-3 PIC X(30) VALUE "T".
01 ALL-PARTS PIC X(30).
PROCEDURE DIVISION.
MOVE SPACE TO ALL-PARTS
* MOVE ZERO TO data-name-used-with-POINTER
* (if used)
STRING PART-1 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
PART-2 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
PART-3 DELIMITED BY SPACE
INTO ALL-PARTS
ON OVERFLOW
DISPLAY "SORRY, YOUR DATA WAS TRUNCATED"
END-STRING
DISPLAY
">"
ALL-PARTS
"<"
GOBACK
.
我跑的代碼都沒有上述格式的工作。我現在正在運行這個例子。我想要名稱之間有一個空格TEST TEST T –
這些是名字。如果可以嵌入空格,STRING將不會給你正確的結果。 'JOAO MARIA DE SOUSA'。要做的事情是寫一個小程序來檢查你的數據。你可能會很幸運,但名字有一個習慣,不只是滾動和合作。取決於源代碼,以及它們是否已在系統中「清理」。簡單的錯字可以在任何地方得到空間,記住,如果系統允許的話。另外請記住,你可能會吹出你輸出的長度,所以你應該檢查一下。 –
沒有嵌入式空間。我現在正在工作。我錯誤地將「SIZE DELIMITED BY SIZE」作爲單個參數,只是將其放在最後。一旦我意識到這是它自己的實際參數,它現在可以工作。 –