Есть ли способ прочитать последовательный файл в коболе много раз? Например, вы достигли конца файла, а затем вернулись к началу файла?
Чтение последовательного файла в коболе
Ответы (6)
Закройте файл, снова откройте его и перечитайте.
Мне интересно узнать, почему вы хотите это сделать?
JOINKEYS
из DFSORT
очень помогает. Я настоятельно не рекомендую ваш подход, если ваше требование состоит ТОЛЬКО в поиске строки из файла1 со списком строк в файле2...
- person Raja Reddy; 07.12.2011
Вы также можете прочитать файл внутри цикла или выполнить изменение. Как и в другом ответе, убедитесь, что вы закрываете файл каждый раз, когда доходите до конца, и снова открываете его.
В этом случае JOINKEYS
из DFSORT
очень помогает. Я настоятельно не рекомендую ваш подход, если ваше требование состоит ТОЛЬКО в поиске строки из файла1 со списком строк в файле2.
Альтернатива: сделайте копию файла 1 с помощью утилиты (или другой программы COBOL). Копия, файл 1a, имеет ОРГАНИЗАЦИЯ ОТНОСИТЕЛЬНО (возможно, VSAM RRDS). В вашей программе сканирования/сопоставления вы можете перейти к первой записи файла 1a с помощью инструкции START.
Точно так же вы можете создать индексированный последовательный файл 1a, где ключ — это просто произвольное возрастающее число, совпадающее с номером записи.
Было бы просто глупо открывать, обрабатывать, закрывать, снова открывать, обрабатывать, снова закрывать любое количество раз, не говоря уже о 1000 раз. Это очень, очень много времени.
В программе Cobol вы сохраняете меньший файл в таблице и обрабатываете таблицу с большим файлом, как было предложено.
Однако вам не нужна программа. JOINKEYS предоставит решение.
У тебя нет ключа? О, дорогой, дорогой. Вы делаете один. Вы создаете один и тот же однобайтовый ключ с одинаковым значением для каждой записи в обоих файлах. Сделайте JOINKEYS на этом ключе. Укажите SORTED в JOINKEYS (и NOSEQCK, если у вас есть DFSORT). У вас есть «декартово» соединение. Используйте SS (совпадение подстроки), которое может относиться ко всей записи или к ее части. Ваш фактический требуемый результат неясен, и я не думаю, что вы собираетесь придумать это сейчас.
С DFSORT вы можете сделать это за один шаг. С SyncSort вы можете сделать это за один шаг, если ваша версия поддерживает файлы JNFnCMTL.
Вот мое решение
В файле 1 есть записи плюс ключ. В файле 2 есть записи, в которых ключ встречается много раз.
Я храню данные файла1 в массиве, это означает, что вы должны знать размер данных
Я сканирую файл2 до конца файла, если ключ в файле2 совпадает с ключом в массиве, затем выполняю ваши вычисления,
Пример Сохраните 1 2 3 4 в массиве из файла 1 до конца файла 1. Сканируйте файл 2, имеющий 1 1 4 4 2 3. Если 1 в файле 2 соответствует 1 в массиве, то вычислите Продолжайте, пока не достигнете конца файла 2.
Надеюсь, поможет