Show TOC Anfang des Inhaltsbereichs

Obsolete Anweisungen für interne Tabellen  Dokument im Navigationsbaum lokalisieren

AchtungDie folgenden Anweisungen sind obsolet und stehen nur noch aus Gründen der Kompatibilität zu Releases vor 4.6 bzw. 6.10 zur Verfügung. Die Anweisungen können in älteren Programmen noch gefunden werden, sollten aber nicht mehr verwendet werden.

Tabellenzeilen nach Zeichenketten durchsuchen

Um zeichenartige Zeilen einer Index-Tabelle nach einer bestimmten Zeichenkette zu durchsuchen, verwendet man die Anweisung:

SEARCH itab FOR str options.

Diese Anweisung durchsucht die Zeilen der internen Tabelle itab nach der Zeichenkette in str. Falls die Suche erfolgreich ist, wird sy-subrc auf 0 und sy-tabix auf den Index der Tabellenzeile gesetzt, in der die Zeichenkette gefunden wurde. sy-fdpos enthält den Offset der Zeichenkette in der Tabellenzeile. Andernfalls wird sy-subrc auf 4 gesetzt.

In einem Unicode-System muss der Zeilentyp der internen Tabelle zeichenartig sein. In einem Nicht-Unicode-System kann die Zeile auch noch numerische oder hexadezimale Komponenten enthalten.

Die Anweisung behandelt alle Tabellenzeilen unabhängig von ihrem tatsächlichen Typ als Felder des Typs c. Es werden keine Konvertierungen durchgeführt. Der Suchstring str kann die gleiche Form haben, wie beim normalen Suchen mit SEARCH in Feldern.

Die verschiedenen Optionen (options) für die Suche in der Tabelle itab sind:

·        ABBREVIATED

Die Tabelle itab wird nach einem Wort durchsucht, das die Zeichenfolge in str enthält. Die Zeichen können durch andere Zeichen getrennt sein. Das erste Zeichen des Wortes und im String str müssen identisch sein.

·        STARTING AT lin1

Die Tabelle itab wird ab Zeile lin1 nach str durchsucht, wobei lin1 eine Variable sein kann.

·        ENDING AT lin2

Die Tabelle itab wird bis Zeile lin2 nach str durchsucht, wobei lin2 eine Variable sein kann.

·        AND MARK

Wenn der Suchstring gefunden wird, werden alle Zeichen des Suchstrings (und alle dazwischen liegenden Zeichen bei Verwendung von ABBREVIATED) in Großbuchstaben umgesetzt.

Diese Anweisung funktioniert nur mit Index-Tabellen. Sie hat keine Entsprechung für Hash-Tabellen.

Beispiel

REPORT demo_int_tables_search_index.

DATA: BEGIN OF line,
        index(4) TYPE c,
        text(8) TYPE c,
      END OF line.

DATA itab LIKE SORTED TABLE OF line WITH UNIQUE KEY index.

DATA num(2) TYPE n.

DO 10 TIMES.
  line-index = sy-index.
  num = sy-index.
  CONCATENATE 'string' num INTO line-text.
  APPEND line TO itab.
ENDDO.

SEARCH itab FOR 'string05' AND MARK.

WRITE: / '''string05'' found at line', (1) sy-tabix,
         'with offset', (1) sy-fdpos.

SKIP.

READ TABLE itab INTO line INDEX sy-tabix.
WRITE: / line-index, line-text.

Die Listenausgabe ist:

'string05' found at line 5 with offset 4

         5 STRING05

Der Offset der gefundenen Zeichenkette wird durch die Breite der ersten Tabellenspalte vom Typ i der Länge 4 bestimmt. Die Option AND MARK verändert den Tabelleninhalt der entsprechenden Zeile.

Zeilen mit WRITE TO ändern

In Standard-Tabellen können Zeilen auch mit der folgenden Anweisung geändert werden:

WRITE f TO itab INDEX idx.

Diese Variante der Anweisung WRITE TO (siehe Schlüsselwortdokumentation) konvertiert den Inhalt des Felds f nach Typ c und überträgt die resultierende Zeichenkette in die Zeile mit dem Index idx. Bei erfolgreichem Ersetzen wird sy-subrc auf 0 gesetzt. Enthält die interne Tabelle weniger Zeilen als idx, wird keine Zeile geändert und sy-subrc wird auf 4 gesetzt.

Der Datentyp von f muss in ein Characterfeld konvertierbar sein, ansonsten tritt ein Syntax- oder Laufzeitfehler auf. Die Zeile wird unabhängig von ihrem tatsächlichen Zeilentyp immer als Zeichenkette interpretiert. Die Bearbeitung von Teilfeldern ist wie beim normalen WRITE TO möglich. Diese Anweisung sollte bei strukturierten Zeilentypen nur verwendet werden, wenn ein Zeichen, dessen Position genau bekannt ist, umgesetzt werden soll. Eine andere Anwendungsmöglichkeit sind interne Tabellen, deren gesamter Zeilentyp zeichenartig ist. Tabellen mit solchem Typ werden beispielsweise bei der dynamischen Programmierung oft verwendet.

Beispiel

REPORT demo_int_tables_write_ind.

DATA text(72) TYPE c.

DATA code LIKE TABLE OF text.

text = 'This is the first line.'.

APPEND text TO code.

text = 'This is the second line. It is ugly.'.

APPEND text TO code.

text = 'This is the third and final line.'.

APPEND text TO code.

WRITE 'nice.' TO code+31 INDEX 2.

LOOP AT code INTO text.
  
WRITE / text.
ENDLOOP.

Die Ausgabe sieht so aus:

This is the first line.
This is the second line. It is nice.
This is the third and final line.

In diesem Beispiel wird eine interne Tabelle code mit einem elementaren Feld vom Typ c definiert, das 72 Zeichen lang ist. Nachdem die Tabelle mit drei Zeilen gefüllt wurde, wird die zweite Zeile mit der Anweisung WRITE TO geändert. Das Wort "ugly" wird durch das Wort "nice" ersetzt.

Ende des Inhaltsbereichs