Четене на последователен файл в cobol

Има ли някакъв начин да се прочете последователен файл в cobol много пъти? Например стигнахте до края на файла, след което се върнахте от началото на файла?


person Grekoz    schedule 05.12.2011    source източник


Отговори (6)


Затворете файла, отворете го отново и прочетете отново.

Интересно ми е защо бихте искали да направите това?

person TrueDub    schedule 05.12.2011
comment
Здравейте TrueDub, правя търсене за появата на низ във файл 1 от елементите във файл 2, но няма ключове. Благодаря все пак за страхотния отговор. - person Grekoz; 06.12.2011
comment
Ще бъде ли по-лесно да прочетете файла в масив и просто да го търсите всеки път? Със сигурност ще бъде по-бързо, но може да срещнете проблеми с паметта, ако файлът е огромен. - person TrueDub; 06.12.2011
comment
В такъв случай JOINKEYS от DFSORT помага много. Силно не препоръчвам вашия подход, ако изискването ви е САМО да търсите низа от file1 със списъка с низове във file2... - person Raja Reddy; 07.12.2011

Можете също така да прочетете файла в цикъл или да извършите промяна. Подобно на другия отговор, уверете се, че затваряте файла всеки път, когато стигнете до края, и го отваряте отново.

person Bill Burgess    schedule 05.12.2011
comment
Здравей Бил, повторното отваряне на файла може да достигне до хиляда повторни отваряния, което според мен би било твърде скъпо и неефективно. - person Grekoz; 14.12.2011

В такъв случай JOINKEYS от DFSORT помага много. Силно не препоръчвам вашия подход, ако изискването ви е САМО да търсите низа от file1 със списъка с низове във file2.

person Raja Reddy    schedule 09.12.2011
comment
Здравей Raja, Joinkeys, нито dfsort няма да помогнат, тъй като няма ключове и нищо за сортиране. Файл 1 е боклук, а файл 2 има по един низ на ред. Целта е да се намери този единичен низ във файл 1 на ред от файл 2. Ако този определен низ е намерен във файл 1, поставете флаг на този низ във файл 2, след което вземете следващия елемент в следващия ред, след което потърсете появяване на низа във файл 1 отгоре. - person Grekoz; 14.12.2011
comment
Разбирам... но все пак опитайте да включите, ако смятате, че можете да ги използвате... Чувствам, че сте си помислили... продължете само с логиката на вашата програма cobol... Ако все още имате нужда от някакво предложение, дайте кратко на изискването с файлови оформления и lrecl.. може да се опита да разреши... - person Raja Reddy; 18.12.2011

Алтернатива: направете копие на файл 1 с помощна програма (или друга COBOL програма). Копието, файл 1a, има ОРГАНИЗАЦИОНЕН РОДСТВЕН (може би VSAM RRDS). Във вашата програма за сканиране/съпоставяне можете да препозиционирате първия запис на файл 1a с командата START.

По същия начин можете да направите индексиран последователен файл 1a, където ключът е просто произволно възходящо число, което се оказва същото като номера на записа.

person David Gorsline    schedule 20.05.2012

Би било просто глупаво да отваряте, обработвате, затваряте, отваряте отново, обработвате отново, затваряте отново произволен брой пъти, камо ли до 1000. Отнема много, много време.

С програма Cobol съхранявате по-малкия файл в таблица и обработвате таблицата спрямо по-големия файл, както беше предложено.

Въпреки това, не ви трябва програма. JOINKEYS ще ви даде решението.

Нямате ключ? О, скъпи, скъпи. Вие правите един. Създавате един и същ еднобайтов ключ със същата стойност за всеки запис и в двата файла. Направете JOINKEYS на този ключ. Посочете SORTED на JOINKEYS (и NOSEQCK, ако имате DFSORT) Имате "декартово" съединение. Използвайте SS (съвпадение на подниз), което може да бъде за целия запис или част от записа. Вашият действителен необходим резултат е неясен и не предполагам, че ще го измислите сега.

С DFSORT можете да го направите в една стъпка. С SyncSort можете да го направите в една стъпка, ако вашата версия поддържа JNFnCMTL файлове.

person Bill Woodger    schedule 01.02.2013

Ето моето решение

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

Дано помогне

person Thabang    schedule 15.06.2018