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

3

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

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

是的,unstring 可能是您最好的选择。请注意,现代大型计算机的排序工具通常内置数据选择功能。如果 COBOL 要求只是表达个人偏好,您可能会发现使用工具更容易。


3

您是否考虑过使用INSPECT?以下方法也可为您带来帮助……

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

COUNTER是一个数字工作存储变量,用于计算在INPUT-RECORD中找到的不重叠出现次数为|SAL|的字符串。


检查在这里更容易,您只需要知道记录中是否存在文本|sal|。使用unstring,您需要编写代码来处理所有找到的部分。 - Kwebble

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

如果我们有保证只查看第二个字段,那就简单多了。 - mckenzm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接