SET DATASET

Short Reference

Syntax

SET DATASET dest [POSITION {pos|{END OF FILE}}]
                 [ATTRIBUTES attr].

Extras:

1. ... POSITION {pos|{END OF FILE}}

2. ... ATTRIBUTES attr

Effect

With the addition POSITION, this statement determines the position of the file pointer in the file specified in dset. With the addition ATTRIBUTES, it sets additional attributes for the file. At least one of these two additions must be specified.

For dset, a character-type data object is expected that contains the platform-specific name of the file. The file must already be open, otherwise a treatable exception occurs.

Addition 1

... POSITION {pos|{END OF FILE}}

Effect:

This addition sets the file pointer in the file, either in the position specified in pos, or at the end of the file. For pos, a numerical data object is expected.

The position is specified in bytes and the start of the file is equal to position 0. If the value of pos is -1, the file pointer is set to the end of the file. Other negative values are not permitted.

Note the following special cases:

  1. If the file is open for reading and the value of pos is greater than the length of the file, the file pointer is positioned outside the file. Unless the position is changed, no data can be read. If write changes are then made to the file, in a non- Unicode program, the file is filled with hexadecimal 0's from the end of the file to the specified position.

  2. If the file is opened for writing and the value of pos is greater than the length of the file, the next time the file is written in, it is filled with hexadecimal 0s from the end of the file to the specified position.

  3. If the file is opened for appending, the position specification is ignored and the file pointer remains positioned at the end of the file.

  4. If the file is opened for changing, and the value of pos is greater than the length of the file, at the next write access, hexadecimal 0s are added from the end of the file to the specified position.

The addition POSITION cannot be specified for files that have been opened with the addition FILTER of the statement OPEN DATASET. This leads to a treatable exception.

Notes:

For file sizes greater than 2 GB, a data object pos of data type i is not sufficient for entering all the possible positions of the file pointer.

Example:

During writing, the file is read from the start of the file until the first end-of-line marker, and then the new content is written starting from the end of the file. If the data pointer is not explicitly set after reading, the last TRANSFER statements would overwrite the file after the first end-of-line marker.

DATA: file TYPE string VALUE 'test1.dat',
      pos  TYPE i,
      text TYPE string.

OPEN DATASET file FOR OUTPUT IN TEXT MODE
                             ENCODING DEFAULT
                             WITH SMART LINEFEED.

TRANSFER: 'Line1' TO file,
          'Line2' TO file,
          'Line3' TO file.

SET DATASET file POSITION 0.
READ DATASET file INTO text.
SET DATASET file POSITION END OF FILE.

TRANSFER: 'Line4' TO file,
          'Line5' TO file,
          'Line6' TO file.

CLOSE DATASET file.

Addition 2

... ATTRIBUTES attr

Effect:

Using this addition changes some of the attributes that were determined when the file was opened with the statement OPENDATASET. For attr, a data object of type dset_changeable_attributes from the type group DSET must be specified (see the table below). The structure dset_changeable_attributes corresponds to the substructure changeable of the structure dset_attributes. Data objects of the structure dset_attributes can be filled using the statement GET DATASET.

Component Meaning
indicator Structure with the components repl_char, conv_errors, code_page, endian, and linefeed_mode. If these components contain the value "X" in attr, the values are used in the components with the same names in the structure dset_changeable_attributes for changing.
repl_char In this component of attr, a single-character character-type replacement character can be specified to overwrite the replacement character specified when the file was opened using the addition REPLACEMENT CHARACTER of the statement OPEN DATASET.
conv_errors In this component of attr, the value "I" or "R" can be specified to overwrite the setting made when the file was opened using the addition IGNORING CONVERSION ERRORS. The value "I" suppresses the exceptions, with " R" the exceptions are triggered.
code_page In this component of attr, a codepage from the column CPCODEPAGE of the database table TCP00 can be specified, to overwrite the codepage specified when the file was opened using the addition CODE PAGE of the statement OPEN DATASET.
endian In this component of attr, the value " B" or "L" can be specified to overwrite the setting made when the file was opened using the additions { BIG | LITTLE } ENDIAN of the statement OPEN DATASET. The value "B" sets the byte order to Big Endian, the value "L" sets it to Little Endian.
linefeed_mode In this component of attr, one of the values "N", "S", "U" or "W" can be entered to overwrite the setting made using the addition WITH NATIVE|SMART|UNIX|WINDOWS LINEFEED of the statement OPEN DATASET as appropriate.

For some components, the possible input values are defined as constants in the type group DSET.

The values entered in attr must comply with the syntax rules for the relevant additions of the statement OPEN DATASET, otherwise this leads to a treatable exception:

Note:

The changeable attributes do not affect the attributes of the file in the operating system, but rather the attributes with which the file is opened in ABAP, and which affect how it is handled in ABAP.

Example:

Depending on the non-changeable attributes of the file test.dat, some of its changeable attributes are changed.

TYPE-POOLS dset.

DATA: dset TYPE string VALUE 'test.dat',
      attr TYPE dset_attributes.

OPEN DATASET dset FOR INPUT IN LEGACY TEXT MODE
                            WITH NATIVE LINEFEED.

...

GET DATASET dset ATTRIBUTES attr.

IF attr-fixed-mode = 'T' OR
   attr-fixed-mode = 'LT'.
  CLEAR attr-changeable.
  attr-changeable-indicator-conv_errors = 'X'.
  attr-changeable-conv_errors = 'I'.
  attr-changeable-indicator-linefeed_mode = 'X'.
  attr-changeable-linefeed_mode = 'S'.
  IF attr-fixed-mode = 'LT'.
    attr-changeable-indicator-code_page = 'X'.
    attr-changeable-code_page = '1100'.
  ENDIF.
  SET DATASET dset ATTRIBUTES attr-changeable.
ENDIF.

CLOSE DATASET dset.

Exceptions

Catchable Exceptions

CX_SY_CODEPAGE_CONVERTER_INIT

CX_SY_CONVERSION_CODEPAGE

CX_SY_FILE_OPEN_MODE

CX_SY_FILE_POSITION

Non-Catchable Exceptions