2011-06-27 58 views
0

我們使用的是OpenVMS系統,我相信它使用的是Cobol from HP讀取和排序可變長度的CSV文件

帶有大量記錄(500mb或更多)的數據文件,其中可變長度。記錄用逗號分隔。我想分析每個記錄並提取相應的字段進行處理。在那之後,我可能想按某些特定領域進行分類。用cobol可能嗎?

我已經看到只使用固定長度記錄進行排序。

回答

2

可變長度是沒有問題的,不知道到底怎麼樣,這是在VMS COBOL完成,但IBMese這就是: -

文件區域。
FD文件記錄取決於記錄長度。
01 THE-RECORD PICTURE X(5000)。
工作存儲部分。
01記錄長度圖片9(5)計算。

當您讀取文件「REC-LENGTH」將包含記錄長度時,寫入記錄時它將寫入一個長度爲REC-LENGTH的記錄。

要處理分隔的記錄文件,您可能需要使用「UNSTRING」動詞將其轉換爲固定格式。這非常詳細(但是這是COBOL)。

UNSTRING record DELIMITED BY "," 
INTO field1, field2, field3, field4, field5 etc.... 
END-UNSTRING 

一旦記錄是固定格式,您可以正常使用SORT。

+0

但我只看到基於固定格式的排序。你的意思是將可變長度記錄解開爲不同的固定長度列嗎? – lamwaiman1988

0

Cobol SORT動詞將做你所需要的。

如果SD文件包含可變長度記錄,則所有KEY數據項必須包含在記錄的前n個字符位置中,其中n等於爲該文件指定的最小記錄大小 。換句話說,他們必須在固定部分。

但是,您可以通過使用輸入過程輕鬆解決這個問題。這將使您可以創建一個虛擬文件,並在正確的位置放置其鍵。在你的輸入過程中,你將把你的變量,逗號分隔的記錄,重新格式化成一個在前面有鍵的變量,然後「釋放」它。

+0

你有什麼樣的例子嗎? – lamwaiman1988

0

如果我的記憶是正確的,VMS有一個SORT/MERGE實用程序,您可以在將文件處理成固定文件格式(可能還有變量)後使用。通常情況下,獨立排序實用程序的性能要優於在線COLBOL排序,如果排序標準將來發生變化,則可以更好地進行設計。

0

無需在COBOL中編寫解決方案,至少不要對文件進行排序。 UNIX排序實用程序應該做得很好,只需調用sort -t','-n或許有其他選項。

+0

OpenVMS <> UNIX。嘗試提出適合問題的解決方案。 – NealB