2011-12-05 289 views

回答

2

關閉文件,重新打開並重新閱讀。

我很想知道爲什麼要這樣做?

+0

Hi TrueDub,我正在搜索文件2中文件1中字符串的出現,但沒有鍵。儘管如此,謝謝你的出色答覆。 – Grekoz

+0

將文件讀入數組並輕鬆搜索每個文件會更容易嗎?它肯定會更快,但如果它是一個巨大的文件,您可能會遇到內存問題。 – TrueDub

+0

在這種情況下,'DFSORT'的'JOINKEYS'幫助很多。我強烈建議你的方法,如果你的要求是隻搜索字符串從file1與字符串在file2中的列表... –

2

您也可以讀取循環內的文件或執行變化。與其他答案一樣,確保每次到達結尾時都關閉文件並重新打開文件。

+0

嗨比爾,重新打開文件可以達到一千重新開放,我認爲這將是太昂貴效率低下。 – Grekoz

0

在這種情況下,JOINKEYSDFSORT幫助很多。如果您的要求只是從file1中搜索字符串file2中的字符串,我強烈建議您不要使用這種方法。

+0

嗨拉賈,Joinkeys或dfsort不會幫助,因爲沒有鑰匙,也沒有什麼可以排序。文件1是垃圾,文件2每行只有一個字符串。目標是從文件2的每行中找到文件1中的單個字符串。如果在文件1中找到了某個字符串,請在文件2中將該標記放在該字符串中,然後在下一行中獲取下一個項目,然後查找從頂部發生文件1中的字符串。 – Grekoz

+0

我明白了......但如果你覺得你可以使用它們,仍然會嘗試合併......我覺得你曾經想過......只用你的cobol程序邏輯...如果你仍然需要一些建議,把一個簡要的文件佈局和lrecls的要求可能會嘗試解決... –

0

替代方法:使用實用程序(或其他COBOL程序)複製文件1。副本文件1a具有ORGANIZATION RELATIVE(可能是VSAM RRDS)。在您的掃描/匹配程序中,您可以使用START語句重新定位到文件1a的第一條記錄。

等價地,你可以創建一個索引順序文件1a,其中鍵只是一個隨機的升序數,恰好與記錄號相同。

0

任何時候打開,處理,關閉,重新打開,重新處理,重新關閉都是簡單的愚蠢,更不用說高達1,000。這是非常非常耗時的。

使用Cobol程序,您可以將較小的文件存儲在一個表中,並按照建議對較大文件處理表。

但是,您不需要程序。 JOINKEYS 給你解決方案。

你沒有鑰匙?哦,親愛的,親愛的。你做一個。對於兩個文件上的每條記錄,您都使用相同的單字節密鑰,並且具有相同的值。在該鍵上執行JOINKEYS。在JOINKEYS上指定SORTED(如果您有DFSORT,則指定NOSEQCK)您有「笛卡爾」聯接。使用SS(一個子字符串匹配)可以用於整個記錄或記錄的一部分。你的實際要求的輸出是不清楚的,我不認爲你現在會想出來。

使用DFSORT,您可以一步完成。使用SyncSort,如果您的版本支持JNFnCMTL文件,則可以一步完成。

相關問題