TRANSFER dobj TO dset [LENGTH len]
[NO END OF LINE].
This statement passes the content of data object
dobj to the file specified in
dobj, ´data objects with elementary data types and
flat structures can
be specified. The file must be open for writes, appends, or changes. If a closed or invalid file is accessed, a handleable exception is raised. If the file was opened as a
dobj must be character-like. This restriction does not apply to
legacy text files.
dset expects a character-like data object containing the
physical name of
the file. The content is written to the file from the current file pointer. After the data has been
passed, the file pointer is positioned after the inserted data. The addition
LENGTH can be used to restrict the number of characters or bytes passed.
The Influence of Access Type
The access type defined in the statement
OPEN DATASET has the following effect on the data passed from:
A file opened to be read using
FOR INPUTcannot be written.
- In a file opened for writing using FOR OUTPUT, the system writes to the file from the current file pointer. If the file pointer is positioned after the current start of the file, the file is padded with hexadecimal 0 from the start of the file to the file pointer.
- In a file opened for appending using FOR APPENDING, the system writes to the file from the current file pointer, which is always at the end of the file.
In a file opened for changing using
FOR UPDATE, the system writes to the file from the current file pointer. If the file pointer is positioned after the end of the file, the file is padded with hexadecimal 0 between the end of the file and the file pointer position.
Influence of the Storage Type
The data is passed regardless of the storage type
used to open the file with the statement
OPEN DATASET. If the specified storage type requires conversion, it is carried out before the write process.
If the file was opened as a text file or a
legacy text file, the trailing blank characters are deleted for all data objects, except for those of data type
string. The line end marker defined when the file was opened is then added to the remaining content of the data object or to the result of the conversion, and the final result is written byte-by-byte to the file. The appending of the end of line separator can be prevented using
NO END OF LINE.
If the file was opened as a binary file or a
legacy binary file, the content of the data object or the result of the conversion is written byte-by-byte to the file.
TRANSFER always sets
sy-subrc to the value 0 or raises an exception.
Only character-like data objects can be written to text files. Only byte-like data objects should be
written to binary files. To store numerical data objects or mixed structures, it is best to assign them
to character-like or byte-like typed field symbols using the
CASTING addition of the statement
ASSIGNand save these field symbols.
- If parts of a file are to be overwritten, it must be opened for changes.
The file does not need to be open in obsolete
non-Unicode programs. In this case, the file is opened as a binary file for writes with
automatic authorization checks. Furthermore,
dobjdoes not have to be character-like if the file is opened as a text file and it is possible to write to a file opened for reads using
FOR INPUTin exactly the same way as a file opened for changes using
... LENGTH len
This addition determines how many characters or bytes of the data object
are written to the file.
len expects a data object of the type
It contains the number of characters or bytes. In text files, the content of
specifies the number of characters that are written from the memory. For binary files, legacy text files,
and legacy binary files,
len specifies the number of bytes that are written to the file. The first
len characters or bytes are passed and
alignment gaps are included
in the structures. If the addition
LENGTH is not specified, all characters or bytes are passed.
If the value of
len is less than or equal to 0, no characters or bytes are passed. If the file is opened as a (legacy) text file, however, a
line end marker is inserted into the file by
default. If the value of
len is greater than the number of characters or
dobj, blank characters or hexadecimal 0 are passed to the file instead
of the missing characters or bytes, depending on whether the file was opened as a (legacy) text file or a (legacy) binary file.
... NO END OF LINE
This addition has the effect that, in text files or legacy text files, no end of line separator is appended to the data passed.
The binary data from the database table SPFLI is passed to a binary file
flights.dat. The structure of the table rows passed contains both character-like
and numerical fields. Since the type-compliant storage of mixed structures in files is not possible,
the binary content of the structure is directly accessed using a typed field symbol
To achieve the same result, the structure
wa could be passed directly. The
recommended procedure however is to use the field symbol, because it explicitly passes a binary data
type to a binary file. This type of storage is only recommended for short-term storage within the same
system, because the byte-like content depends on the byte order and the current system code page. For
long-term storage or for exchanging between systems, the data should be converted to character-like containers and stored as a text file.
DATA: file TYPE string VALUE `flights.dat`, wa TYPE spfli. FIELD-SYMBOLS <hex_container> TYPE x. OPEN DATASET file FOR OUTPUT IN BINARY MODE. SELECT * FROM spfli INTO @wa. ASSIGN wa TO <hex_container> CASTING. TRANSFER <hex_container> TO file. ENDSELECT. CLOSE DATASET file.
Cause: The desired conversion is not supported. (For example, because a
language not supported by the conversion was specified using
SET LOCALE LANGUAGE.)
Cause: Conversion is not possible.
Cause: No authorization to access the file.
Cause: Error when writing to the file.
Cause: File cannot be opened.
Cause: The file is not open.
Cause: The file was opened in a Unicode program using
OPEN DATASET ... FOR INPUTand cannot be written to.
Cause: The file was opened using the addition
FILTERand since then a switch of the work process took place.
Cause: Maximum number of open files exceeded.