Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201178
  • 博文数量: 49
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 09:35
文章分类

全部博文(49)

文章存档

2008年(49)

我的朋友

分类:

2008-03-28 17:32:19

1.如果通过text模式来读取,每次Read dataset都是以换行结束,也就是有几行数据就会读几次,之后sy-subrc就变为4了(既读完最后一行之后的下一次READ,sy-subrc才变成4). 不论你把内容读到多长的容器temp里.所以这个时候的文字容器最好用string类型.因为每行的长度可能不同.

  OPEN DATASET 'd:\it0105.txt' FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    DO.
      READ DATASET 'd:\hrtest\it0105.txt' INTO temp.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
    ENDDO.

  CLOSE DATASET 'd:\hrtest\it0105.txt'.

2. 如果通过 Binary模式来读取, 那么每次 Read dataset是以容器读满为结束标志(即读容器不满,但是不一定末尾是0就是没满,有可能确实把0读进来了。sy-subrc就变为4了,所以这种情况处理特殊一点,先在if sy-subrc之后做处理,一般都是添加到某内表中,然后在OPEN dataset的循环结束之后,再看容器中是否为空,如果是空,表示最后一次处理刚好把容器装满;如果不是空的,则表示最后一次读数据的时候容器没满,而sy-subrc又变成了4,跳出了循环,所以需要在循环之后处理之后一批数据). 容器要为 X 类型
 
  DATA temp(10) TYPE x.

  OPEN DATASET 'd:\it0105.txt' FOR INPUT IN BINARY MODE.
    DO.
      READ DATASET 'd:\hrtest\it0105.txt' INTO temp.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.

      (....数据处理 。。)
    ENDDO.

  CLOSE DATASET 'd:\hrtest\it0105.txt'.

  (。。。判断容器temp是否为空,如不是 则表示上面还没有处理最后一次的数据)。

阅读(2023) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~