Daten in Dateien schreiben Dokument im Navigationsbaum lokalisieren

Um Daten in eine Datei auf dem Anwendungsserver zu schreiben, benutzen Sie die Anweisung TRANSFER wie folgt:

Syntax

TRANSFER <f> to <dsn> [LENGTH <len>].

Die Anweisung schreibt den Wert des Feldes <f> in die Datei <dsn>. Sie können den Übertragungsmodus mit der Anweisung OPEN DATASET angeben. Wenn die Datei nicht zum Schreiben geöffnet ist, versucht das System, sie im Binärmodus zu öffnen. Es ist jedoch besser, eine Datei nur mit der Anweisung OPEN DATASET zu öffnen. Die Anweisung OPEN DATASET und die Namensgebung für Dateien werden in Öffnen einer Datei beschrieben. Der Datentyp des Feldes <f> kann elementar sein, oder es kann sich um eine Feldleiste handeln, die keine internen Tabellen beinhaltet. Interne Tabellen können nicht in einem Lauf in Dateien geschrieben werden.

Mit dem Zusatz LENGTH können Sie die Länge <len> der zu übertragenden Daten angeben. Das System überträgt die ersten <len> Bytes in die Datei. Wenn <len> nicht ausreicht, werden überzählige Bytes abgeschnitten. Wenn <len> zu groß ist, füllt das System die übertragene Zeile von rechts mit Leerzeichen.

Beispiel

Das folgende Programm zeigt, wie interne Tabellen in eine Datei geschrieben werden:

DATA fname(60) TYPE c VALUE 'myfile'.

TYPES: BEGIN OF line,
         col1 TYPE i,
         col2 TYPE i,
       END OF line.

DATA: lin TYPE line,
      TAB TYPE TABLE OF line.

DO 5 TIMES.
  lin-col1 = sy-index.
  lin-col2 = sy-index ** 2.
  APPEND lin TO tab.
ENDDO.

OPEN DATASET fname FOR OUTPUT.
LOOP AT tab INTO lin.
  TRANSFER lin TO fname.
ENDLOOP.
CLOSE DATASET fname.

OPEN DATASET fname FOR INPUT.
DO.
  READ DATASET FNAME INTO lin.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  WRITE: / lin-col1, lin-col2.
ENDDO.

CLOSE DATASET fname.

Ausgabe:

1 1
2 4
3 9
4 16
5 25

In diesem Beispiel werden eine Feldleiste LIN und eine interne Tabelle TAB mit Zeilentyp LINE angelegt. Nachdem die interne Tabelle TAB gefüllt worden ist, wird sie Zeile für Zeile in die Datei "myfile" geschrieben. Dann wird die Datei in die Feldleiste LIN eingelesen, und der Inhalt von LIN wird in das Ausgabebild geschrieben.

Beispiel

Das folgende Beispielprogramm wurde für SAP-Systeme geschrieben, die auf UNIX-Systemen laufen, die mit einer ASCII-Darstellung arbeiten.

DATA fname(60) TYPE c VALUE 'myfile'.

DATA: text1(4) VALUE '1234',
      text2(8) VALUE '12345678',
      hex  TYPE x.

OPEN DATASET fname FOR OUTPUT IN TEXT MODE.
TRANSFER: text1 TO fname LENGTH 6,
          text2 TO fname LENGTH 6.
CLOSE DATASET fname.

OPEN DATASET fname FOR INPUT.
DO.
  READ DATASET fname INTO hex.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.
  WRITE  hex.
ENDDO.
CLOSE DATASET fname.

Ausgabe:

31 32 33 34 20 20 0A 31 32 33 34 35 36 0A

In diesem Beispiel werden die Zeichenketten TEXT1 und TEXT2 im Textmodus in die Datei "myfile" geschrieben. Die Ausgabelänge wird mit 6 angegeben. Indem Sie die Datei Byte für Byte in das hexadezimale Feld einlesen, können Sie sehen, wie sie gespeichert wird: Die Zahlen 31 bis 36 sind die ASCII-Darstellungen der numerischen Zeichen 1 bis 6. 20 stellt ein Leerzeichen dar, und 0A kennzeichnet das Ende einer Zeile. TEXT1 wird von rechts mit zwei Leerzeichen aufgefüllt. Zwei Stellen von TEXT2 werden abgeschnitten.

 

Ende des Inhaltsbereichs