Има ли някакъв начин да се прочете последователен файл в cobol много пъти? Например стигнахте до края на файла, след което се върнахте от началото на файла?
Четене на последователен файл в cobol
Отговори (6)
Затворете файла, отворете го отново и прочетете отново.
Интересно ми е защо бихте искали да направите това?
JOINKEYS
от DFSORT
помага много. Силно не препоръчвам вашия подход, ако изискването ви е САМО да търсите низа от file1 със списъка с низове във file2...
- person Raja Reddy; 07.12.2011
Можете също така да прочетете файла в цикъл или да извършите промяна. Подобно на другия отговор, уверете се, че затваряте файла всеки път, когато стигнете до края, и го отваряте отново.
В такъв случай JOINKEYS
от DFSORT
помага много. Силно не препоръчвам вашия подход, ако изискването ви е САМО да търсите низа от file1 със списъка с низове във file2.
Алтернатива: направете копие на файл 1 с помощна програма (или друга COBOL програма). Копието, файл 1a, има ОРГАНИЗАЦИОНЕН РОДСТВЕН (може би VSAM RRDS). Във вашата програма за сканиране/съпоставяне можете да препозиционирате първия запис на файл 1a с командата START.
По същия начин можете да направите индексиран последователен файл 1a, където ключът е просто произволно възходящо число, което се оказва същото като номера на записа.
Би било просто глупаво да отваряте, обработвате, затваряте, отваряте отново, обработвате отново, затваряте отново произволен брой пъти, камо ли до 1000. Отнема много, много време.
С програма Cobol съхранявате по-малкия файл в таблица и обработвате таблицата спрямо по-големия файл, както беше предложено.
Въпреки това, не ви трябва програма. JOINKEYS ще ви даде решението.
Нямате ключ? О, скъпи, скъпи. Вие правите един. Създавате един и същ еднобайтов ключ със същата стойност за всеки запис и в двата файла. Направете JOINKEYS на този ключ. Посочете SORTED на JOINKEYS (и NOSEQCK, ако имате DFSORT) Имате "декартово" съединение. Използвайте SS (съвпадение на подниз), което може да бъде за целия запис или част от записа. Вашият действителен необходим резултат е неясен и не предполагам, че ще го измислите сега.
С DFSORT можете да го направите в една стъпка. С SyncSort можете да го направите в една стъпка, ако вашата версия поддържа JNFnCMTL файлове.
Ето моето решение
File1 има reocrds плюс ключ File2 има reocrds, където ключът се среща много пъти
Съхранявам подробности за file1 в масив, това означава, че трябва да знаете размера на данните
Сканирам file2 до края на файла, ако ключът във file2 съвпадне с ключ в масива, тогава направете вашето изчисление,
Пример Съхранявайте 1 2 3 4 в масив от File1, докато EOF на File1 Scan file2 има 1 1 4 4 2 3 Ако 1 във file2 съответства на 1 в масива, тогава изчислете Продължете да правите, докато стигнете до края на File2
Дано помогне