Code: Alles auswählen.
REPORT ztext_suche LINE-SIZE 255.
TYPES: BEGIN OF ty_progs,
name TYPE trdir-name,
* id type textpool-id,
key TYPE textpool-key,
entry TYPE textpool-entry,
END OF ty_progs.
DATA: gt_text_read TYPE TABLE OF textpool,
gt_prog_found TYPE TABLE OF ty_progs, "Fundstellen
gt_prog_read TYPE TABLE OF trdir-name, " Alle Programmnamen
gv_prog_name TYPE trdir-name,
gs_prog_found TYPE ty_progs.
FIELD-SYMBOLS: <fs_prog> TYPE trdir-name,
<fs_text> TYPE textpool,
<fs_text_found> TYPE ty_progs.
PARAMETER: p_text TYPE trdir-name.
SELECT-OPTIONS: s_prog FOR gv_prog_name.
START-OF-SELECTION.
* Alle Programmnamen lesen
SELECT name
INTO TABLE gt_prog_read
FROM trdir
WHERE name IN s_prog.
* Textpool von den einzelnen Programmen lesen
LOOP AT gt_prog_read ASSIGNING <fs_prog>.
READ TEXTPOOL <fs_prog> INTO gt_text_read LANGUAGE 'D'.
* Tab. mit Textpool durchsuchen
LOOP AT gt_text_read ASSIGNING <fs_text> WHERE entry CP p_text.
* Wenn gefunden, dann Daten in die "gefunden" Struktur schieben
MOVE-CORRESPONDING <fs_text> TO gs_prog_found.
* Um Programmnamen anreichern
gs_prog_found-name = <fs_prog>.
* An die Tabelle für gefundene Textstellen anhängen
APPEND gs_prog_found TO gt_prog_found.
CLEAR gs_prog_found.
ENDLOOP. "loop at gt_text_read
ENDLOOP. "LOOP at gt_prog_read
UNASSIGN <fs_prog>.
UNASSIGN <fs_text>.
* Ausgabe
LOOP AT gt_prog_found ASSIGNING <fs_text_found>.
WRITE: / <fs_text_found>-name(40), <fs_text_found>-key, <fs_text_found>-entry(60).
ENDLOOP. "LOOP at gt_prog_found
UNASSIGN <fs_text_found>.
END-OF-SELECTION.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Murdock
Ok. Aber nur wegen der besseren Lesbarkeit, oder?black_adept hat geschrieben: 1.) Statt "TYPE TABLE OF" das vollständige "TYPE STANDARD TABLE OF ... WITH NON-UNIQUE DEFAULT KEY"
Das stimmt. Beides. Sollte ich hier im Betrieb mal anmerken, so steht's nämlich in unseren Entwicklungsrichtlinien.black_adept hat geschrieben: 2.) <fs...> ist eine Tautologie. Auch die Sichtbarkeit (global) ist nicht erkennbar.
Wer's dreckig macht, räumt auch wieder auf Hast natürlich trotzdem Recht.black_adept hat geschrieben: 4.) Die UNASSIGNs sind überflüssig. Wir leben nicht mehr in Zeiten wo jedes Bit richtig Gold kostet.
black_adept hat geschrieben: 5.) Jetzt muss ich schon suchen - aber was solls. Du wolltest es ja. Schönheitskorrektur: Die TYPEs der Feldsymboldefinitionen stehen nicht untereinander.
Ach guck, wieder was gelernt.black_adept hat geschrieben: 6.) Die Deklaration "PARAMETER" ist zwar erlaubt - aber offiziell heißt das "PARAMETERS"
Das gefällt mir. Ich denke, das werde ich in Zukunft auch so machen.black_adept hat geschrieben: 7.) Reine Geschmackssache und ich kenne Andere, die so etwas aus anderen Überlegungen nicht machen würden. Deine Feldsymbole <fs_prog> und <fs_text> werden ledlich für deine LOOP ... ASSIGNING verwendet. In so einem Fall deklariere ich die Feldsymbole mittels "<...> LIKE LINE OF tabelle" um diesen Sachverhalt darzustellen.
Jein, es trainiert für ABAP-OO (da ist die Syntaxprüfung etwas strenger). SAP macht zwar aus TYPE TABLE OF impliziet ein TYPE STANDARD TABLE OF, aber es wird kein Schlüssel definiert. Für manche Dinge braucht man dann aber wieder diese Schlüsseldefinition z.B. wenn Deep-Structure definiert werden sollen.Murdock hat geschrieben:Ok. Aber nur wegen der besseren Lesbarkeit, oder?black_adept hat geschrieben: 1.) Statt "TYPE TABLE OF" das vollständige "TYPE STANDARD TABLE OF ... WITH NON-UNIQUE DEFAULT KEY"
Finde ich gutblack_adept hat geschrieben:Hallo Murdock,
Somit höchstens ein paar Kleinigkeiten die ich schöner fände.
1.) Statt "TYPE TABLE OF" das vollständige "TYPE STANDARD TABLE OF ... WITH NON-UNIQUE DEFAULT KEY"
7.) Reine Geschmackssache und ich kenne Andere, die so etwas aus anderen Überlegungen nicht machen würden. Deine Feldsymbole <fs_prog> und <fs_text> werden ledlich für deine LOOP ... ASSIGNING verwendet. In so einem Fall deklariere ich die Feldsymbole mittels "<...> LIKE LINE OF tabelle" um diesen Sachverhalt darzustellen.