чтение и сортировка файла CSV переменной длины - PullRequest
0 голосов
/ 27 июня 2011

Мы используем систему OpenVMS, и я считаю, что она использует Cobol от HP .

С файлом данных большого количества записей (500 МБ или более), переменная длина .Записи разделены запятыми.Я хотел бы проанализировать каждую запись и извлечь соответствующие поля для обработки.После этого я мог бы хотеть сортировать это по некоторым определенным полям.Это возможно с коболом?

Я видел сортировку только с записями фиксированной длины.

Ответы [ 4 ]

2 голосов
/ 27 июня 2011

Переменная длина не проблема, не знаю точно, как это делается в VMS Cobol, но IBMese для этого: -

РАЗДЕЛ ФАЙЛА.
FD ЗАПИСЬ ФАЙЛА РАЗЛИЧАЕТСЯ В ЗАВИСИМОСТИ ОТ ДЛИНЫ.
01 THE RECORDORD PICTURE X (5000).
РАЗДЕЛ РАБОЧЕГО ХРАНЕНИЯ.
01 REC-LENGTH PICTURE 9 (5) ВЫЧИСЛИТЕЛЬНЫЙ.

Когда вы читаете файл "REC-LENGTH" будет содержать длину записи, при записи записи будет записываться запись длины REC-LENGTH.

Для обработки файлов записей с разделителями вам, вероятно, потребуется использовать глагол «UNSTRING» для преобразования в фиксированный формат. Это довольно многословно (но тогда это КОБОЛ).

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

Когда запись в фиксированном формате, вы можете использовать SORT как обычно.

0 голосов
/ 05 июля 2011

Не нужно писать решение на языке COBOL, по крайней мере, не сортировать файл. Утилита сортировки UNIX должна делать это просто замечательно, просто вызовите sort -t ',' -n, возможно, с несколькими другими опциями.

0 голосов
/ 05 июля 2011

Если память у меня правильная, в VMS есть утилита SORT / MERGE, которую вы можете использовать после обработки файла в фиксированном формате (переменная также может быть возможной). Обычно автономная утилита SORT работает лучше, чем встроенная сортировка COLBOL, и может быть лучше разработана, если критерии сортировки изменятся в будущем.

0 голосов
/ 27 июня 2011

Глагол Cobol SORT сделает то, что вам нужно.

Если файл SD содержит записи переменной длины, все элементы данных KEY должны содержаться в первых n символьных позициях записи, гдеn равно минимальному размеру записи, указанному для файла.Другими словами, они должны быть в фиксированной части.

Однако вы можете легко обойти это, используя процедуру ввода.Это позволит вам создать виртуальный файл с ключами в нужном месте.В вашей процедуре ввода вы переформатируете свою переменную, разделенную запятыми, запись, в ту, которая имеет ключи спереди, а затем «отпускает» ее для сортировки.

...