Читать плоский файл. Используйте COBOL для получения определенных строк - PullRequest
3 голосов
/ 11 июня 2011

У меня есть плоский файл, подобный этому:

1|sal|manager|2007/01/01|2007/12/31
2|sal|manager|2008/01/01|2008/12/31
3|per|abc|manager
4|sal|manager|2007/01/01|2007/12/31
5|per|xyz|ceo

Я должен прочитать файл, используя COBOL, и записать строки, содержащие строку sal, во временный файл.

Является ли unstring хорошим вариантом?Пожалуйста, предложите мне подход для решения этой проблемы.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 13 июня 2011

Рассматривали ли вы использование INSPECT ? Следующее будет работать для вас тоже ...

MOVE ZERO TO COUNTER  
INSPECT INPUT-RECORD TALLYING COUNTER FOR ALL '|SAL|'  
IF COUNTER > ZERO  
   write to temp file  
END-IF   

COUNTER - это некоторая числовая рабочая переменная хранения для получения количества числа непересекающихся вхождений строки |SAL|, найденной в INPUT-RECORD.

3 голосов
/ 11 июня 2011

Да, unstring , вероятно, ваш лучший выбор. Имейте в виду, что современные утилиты SORT для мэйнфреймов обычно имеют встроенные возможности выбора данных. Если требование COBOL на самом деле является просто выражением предпочтения, вы можете найти маршрут утилиты проще.

1 голос
/ 12 июня 2011

Unstring - отличный вариант.Поскольку каждое поле ограничено вертикальной чертой, это естественная подгонка.

Если у вас есть фиксированное количество полей, вы можете сделать все сразу.Если у вас есть переменное количество полей, вы можете использовать опцию «указатель» для перехода от поля к полю, пока не доберетесь до конца.

Например:

Move +1 to my-ptr
Move input-record to remaining-str
Perform until remaining-str = spaces
   Unstring remaining-str
      delimited by '|'
      into
         next-field
         remaining-str
      pointer my-ptr
   End-Unstring
   ... do something with next-field ...
End-Perform
...