SAP READ DATASET ABAP Statements

Get Example source ABAP code based on a different SAP table
  


Standard SAP Help for READ_DATASET

READ DATASET

Short Reference
• READ DATASET ABAP Statement
• INTO READ DATASET


ABAP Syntax READ DATASET dset INTO dobj [MAXIMUM LENGTH mlen]

[[ACTUAL] LENGTH alen].

ABAP Addition
1 ... MAXIMUM LENGTH mlen
2 ... [ACTUAL] LENGTH alen

What does it do? This statement exports data from the file specified in dset to the data object dobj. dobj expects variables with elementary data types and flat structures. In Unicode programs , dobj must be character-like if the file was opened as a text file.

dset expects a character-like data object containing the physical name of the file. The content is read from the file starting from the current file pointer. After the data is passed, the file pointer is positioned after the section that was read. Using the MAXIMUM LENGTH addition, the number of characters or bytes to be read from the file can be limited. Using ACTUAL LENGTH, the number of characters or bytes actually used can be determined.

In a Unicode program, the file must be opened with an arbitrary access type; otherwise, an exception that cannot be handled is raised.

If the file was not yet opened in a non-Unicode program, it is implicitly opened using the statement

OPEN DATASET dset FOR INPUT IN BINARY MODE as a binary file for writing. If the system accesses a nonexistent file, a handleable exception is raised.

The Influence of Access Type Files can be read independently of the access type. Whether data can be read or not depends solely on the position of the file pointer. If the latter is at the end of the file or after the file, no data can be read and sy-subrc will be set to 4.

Influence of the Storage Type The import function works irrespective of the storage type in which the file was opened using the statement OPEN DATASET.

If the file was opened as a text file or as a legacy text file, the data is normally read from the current position of the file pointer to the next end-of-line marking, and the file pointer is positioned after the end-of-line marking. If the data object dobj is too short for the number of read characters, the superfluous characters and bytes are cut off. If it is longer, it is padded with blanks on the right.

If the file was opened as a binary file or as a legacy binary file, as much data is read that fits into the data object dobj . If the data object dobj is longer than the number of exported characters, it is padded with hexadecimal 0 on the right.

If the specified storage type makes conversion necessary, this is executed before the assignment to the data object dobj. Afterwards, the read data is placed, byte by byte, into the data object.

System Fields sy-subrcMeaning 0Data was read without reaching end of file. 4Data was read and the end of the file was reached or there was an attempt to read after the end of the file.

Latest notes:The data from the text files should be imported solely into character-like data objects and data from binary files should be imported solely into byte-like data objects. To evaluate imported data as numeric data objects or mixed structures, it is recommended that these are exported into binary containers and then assigned using the CASTING addition of the ASSIGN statement in accordance with the typed field symbols. If the file is opened as a legacy text file when such data is being imported, there is the danger that an end-of-line marking is contained in the binary representation of a number and that the number can therefore not be read. If the file is opened in a non-Unicode program with the READ statement, automatic authorization checks are performed.



Example ABAP Coding
Importing the binary file flights.dat written in
the example by the TRANSFER statement. The data is written (in binary) to a byte-like typed field symbol <(> <<)>hex_container>. Using the assignment of the structured data area wa to the field symbol, this adopts the length of the data area and a corresponding number of bytes for the loop process are imported. It would be possible to import directly into the structure wa with the same result, but the use of the field symbol is the recommended procedure. The reason is that in this way data is explicitly transferred from a binary file into a binary data type. DATA: file TYPE string VALUE `flights.dat`,
wa TYPE spfli,
itab LIKE TABLE OF wa.

FIELD-SYMBOLS <(><<)>hex_container> TYPE x.

OPEN DATASET file FOR INPUT IN BINARY MODE.

ASSIGN wa TO <(><<)>hex_container> CASTING.

DO.
READ DATASET file INTO <(><<)>hex_container>.
IF sy-subrc = 0.
APPEND wa TO itab.
ELSE.
EXIT.
ENDIF.
ENDDO.

CLOSE DATASET file.

cl_demo_output=>display_data( itab ).
• MAXIMUM LENGTH READ DATASET

ABAP Addition

What does it do? This addition determines how many characters or how many bytes at most are read from the file. mlen expects a data object of the type i. It contains the number of characters or bytes. In the case of text files, the content of mlen determines how many characters are read from the file. In the case of binary files, legacy text files, and legacy binary files, mlen determines how many bytes are read from the file.

The first mlen characters or bytes are read from the current position of the file pointer and the file pointer is positioned after the read file. If the file is opened as a (legacy) text file and there isan end-of-line marking within the specified length, data is read only up to this position and the file pointer is positioned after the end-of-line marking.

If the value of mlen is the same as 0, no data is read. If the value of mlen is negative, the addition is ignored and the import takes place in the same way as described for Influence of Storage Type.



Latest notes:In case of text files, the number of bytes read depends on
the character format specified using ENCODING when opening the file.



Example ABAP Coding
This program section has the same functions as the
previous example. Here data is imported not into a byte-like field symbol, but into a byte-like data object hex_container. The number of bytes to be imported is determined by the typed field symbol <(><<)>spfli>. DATA: file TYPE string VALUE `flights.dat`,
hex_container TYPE x LENGTH 1000,
len TYPE i,
itab TYPE TABLE OF spfli.

FIELD-SYMBOLS <(><<)>spfli> TYPE spfli.

DESCRIBE FIELD <(><<)>spfli> LENGTH len IN BYTE MODE.

OPEN DATASET file FOR INPUT IN BINARY MODE.

ASSIGN hex_container TO <(><<)>spfli> CASTING.

DO.
READ DATASET file INTO hex_container MAXIMUM LENGTH len.
IF sy-subrc = 0.
APPEND <(><<)>spfli> TO itab.
ELSE.
EXIT.
ENDIF.
ENDDO.

CLOSE DATASET file.

cl_demo_output=>display_data( itab ).
• ACTUAL LENGTH READ DATASET

ABAP Addition

What does it do? This addition assigns the number of characters or bytes to be read from the file to the data object alen. The following can be specified for alen: An existing variable of the data type i or a variable to which the type i can be converted. An inline declaration DATA(var), where a variable of type i is declared.

For text files, the system determines how many characters were written to the memory area. For binary files, legacy text files, and legacy binary files, the system determines how many bytes were read from the file.

Latest notes:Regardless of the length of the target field, the number of characters or bytes actually read from the file is always returned. The optional addition ACTUAL was introduced in order to be better able to distinguish the addition LENGTH from the addition MAXIMUM LENGTH. For this reason, the addition ACTUAL should always be used.



Runtime Exceptions

Catchable Exceptions
CX_SY_CODEPAGE_CONVERTER_INIT
Reason for error:
The desired conversion is not supported. (For example, because a language not supported by the conversion was specified using SET LOCALE LANGUAGE.)
Runtime error:
CONVT_CODEPAGE_INIT

CX_SY_CONVERSION_CODEPAGE
Reason for error:
Conversion is not possible. The data is read as far as possible. Text data where the conversion has failed is undefined (see also note below).
Runtime error:
CONVT_CODEPAGE

CX_SY_FILE_AUTHORITY
Reason for error:
No authorization for access to file
Runtime error:
OPEN_DATASET_NO_AUTHORITY

CX_SY_FILE_IO
Reason for error:
When reading the file, an error occurred.
Runtime error:
DATASET_READ_ERROR

CX_SY_FILE_OPEN
Reason for error:
File cannot be opened.
Runtime error:
DATASET_CANT_OPEN

CX_SY_FILE_OPEN_MODE
Reason for error:
The file is not open.
Runtime error:
DATASET_NOT_OPEN

CX_SY_PIPE_REOPEN
Reason for error:
The file was opened using the addition FILTER and since then a switch of the work process took place.
Runtime error:
DATASET_PIPE_CLOSED

Return to menu