读一个平面文件。使用COBOL检索特定行

时间:2011-06-11 07:25:31

标签: cobol mainframe jcl

我有一个像这样的平面文件:

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 个答案:

答案 0 :(得分:3)

是的,unstring可能是你最好的选择。请记住,现代大型机SORT实用程序通常具有内置的数据选择功能。如果COBOL要求实际上只是表达的首选项,您可能会发现实用程序路由更容易。

答案 1 :(得分:3)

您是否考虑过使用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

答案 2 :(得分:1)

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