Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
Hallo liebe ABAP-Freunde,

hier mal etwas Pseudocode:

Code: Alles auswählen.

Data my_tab type table of string.

* tab wird mit werten befüllt, blablabla

read table my_tab transporting no fields with key ??? = 'my_string'.
Wenn die Tabelle my_tab im obigen Beispiel von einem strukturierten Typ wäre, könnte ich sie mit READ TABLE lesen. Aber geht das auch mit einer Tabelle von einem nicht-strukturierten Datentyp? Gibt es da irgendeinen syntaktischen Kniff außer sich einen Typ mit einem Feld zu definieren und von dem dann eine Tabelle anzulegen?

Und wenn das READ TABLE nicht gehen sollte, gibt es andere Möglichkeiten um Tabellen auf das Vorhandensein von Werten zu prüfen außer dem öden LOOP ... ?

Danke und Gruß!
Zuletzt geändert von sapnup am 10.07.2017 14:04, insgesamt 1-mal geändert.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
??? = table_line

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
sapnup

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de


Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Beim READ TABLE gibt es im Gegensatz zu LOOP AT auch eine generische Syntax:

Code: Alles auswählen.

read table my_tab transporting no fields with key ('SPALTE_XYZ') = 'my_string'.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Das hat aber mit seiner Frage nichts zu tun, denn bei seiner Tabelle gibt es ja keine (benamte) Spalte.

Allerdings kann ich mich erinnern, dass ich in einem Fall wie seinem auch schon generisch zugegriffen habe mit:

read table my_tab transporting no fields with key 'my_string'.

Ich bin aber nicht sicher (und jetzt auch zu faul zu Testen), ob das so in aktuellen Releases noch funktioniert oder der table_line zwingend erforderlich ist.

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
Ich teste das doch gerne für dich :) Interessiert mich auch grad.

Code: Alles auswählen.

DATA my_tab TYPE TABLE OF string.

APPEND 'Test 123' TO my_tab.
APPEND 'Blablubb' TO my_tab.

* tab wird mit werten befüllt, blablabla

READ TABLE my_tab TRANSPORTING NO FIELDS WITH KEY table_line = 'Test 123'.

WRITE:/ sy-subrc. " sollte 0 sein.

READ TABLE my_tab TRANSPORTING NO FIELDS WITH KEY table_line = 'irgendwas'.

WRITE:/ sy-subrc. " sollte 4 sein.
ohne table_line hat das bei mir net wirklich funktioniert :) Korrektur: funktioniert auch ohne table_line wenn man net zu dämlich ist korrekt zu schreiben :x

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
a-dead-trousers hat geschrieben:Beim READ TABLE gibt es im Gegensatz zu LOOP AT auch eine generische Syntax:

Code: Alles auswählen.

read table my_tab transporting no fields with key ('SPALTE_XYZ') = 'my_string'.
Mein Problem war, dass das Feld keinen Namen hat. Deshalb würde das Klammern hier nicht helfen. black_adept hatte da genau die richtige Lösung. Das Read Table in meinem obigen Beispiel müsste wie folgt aussehen:

Code: Alles auswählen.

read table my_tab transporting no fields with key table_line = 'my_string'.
DeathAndPain hat geschrieben:Das hat aber mit seiner Frage nichts zu tun, denn bei seiner Tabelle gibt es ja keine (benamte) Spalte.

Allerdings kann ich mich erinnern, dass ich in einem Fall wie seinem auch schon generisch zugegriffen habe mit:

read table my_tab transporting no fields with key 'my_string'.

Ich bin aber nicht sicher (und jetzt auch zu faul zu Testen), ob das so in aktuellen Releases noch funktioniert oder der table_line zwingend erforderlich ist.
Dieser Code:

Code: Alles auswählen.

read table my_tab transporting no fields with key 'my_string'.
lässt sich zwar aktivieren, aber bei Ausführen gibts immer einen sy-subrc = 4, unabhänging davon ob 'my_string' in my_tab enthalten ist oder nicht.

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
Somani hat geschrieben:Ich teste das doch gerne für dich :) Interessiert mich auch grad.

Code: Alles auswählen.

DATA my_tab TYPE TABLE OF string.

APPEND 'Test 123' TO my_tab.
APPEND 'Blablubb' TO my_tab.

* tab wird mit werten befüllt, blablabla

READ TABLE my_tab TRANSPORTING NO FIELDS WITH KEY table_line = 'Test 123'.

WRITE:/ sy-subrc. " sollte 0 sein.

READ TABLE my_tab TRANSPORTING NO FIELDS WITH KEY table_line = 'irgendwas'.

WRITE:/ sy-subrc. " sollte 4 sein.
ohne table_line hat das bei mir net wirklich funktioniert :) Korrektur: funktioniert auch ohne table_line wenn man net zu dämlich ist korrekt zu schreiben :x
Mit table_line bekomme ich (Basis 7.4.) erwartungsgemäß 0 und 4. Ohne table_line kommt bei mir 4 und 4 raus.

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
OK alles klar. Ich hab das auf einem 731er System getestet :)

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Jetzt habt ihr mich neugierig gemacht, und ich habe es auch getestet. Ergebnis: es liegt am Datentyp STRING, dass es nicht funktioniert, denn bei der generischen Angabe ist der Datentyp STRING nicht zulässig, so dass er Dein Literal als Zeichenkette von Typ C(...) interpretiert und auf Ungleichheit mit dem String in der Tabelle kommt (anscheinend macht er da keine Typwandlung). Das merkt man, wenn man im READ TABLE-Befehl anstelle des Literals eine Variable vom Typ STRING angibt, dann setzt es nämlich eine entsprechende Fehlermeldung, weil er dann keine Chance mehr hat davon auszugehen, dass Typ C gemeint sei.

So funktioniert es:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report ZTEST4
*&---------------------------------------------------------------------*
REPORT ZTEST4.

TYPES C10(10) TYPE C.

DATA: MY_TAB TYPE TABLE OF C10,
      X TYPE C10.

APPEND 'Test 123' TO MY_TAB.
APPEND 'Blablubb' TO MY_TAB.

* tab wird mit werten befüllt, blablabla

READ TABLE MY_TAB TRANSPORTING NO FIELDS WITH KEY 'Test 123'.

WRITE:/ SY-SUBRC. " sollte 0 sein.

READ TABLE MY_TAB TRANSPORTING NO FIELDS WITH KEY 'irgendwas'.

WRITE:/ SY-SUBRC. " sollte 4 sein.

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Aus der ABAP Doku:
Notes
• Outside of classes, the two obsolete variants of the addition WITH KEY are possible.

Alternative 2
... WITH KEY dobj

Effect

If a single data object is specified directly after the addition WITH KEY, the internal table itab must be a standard table. The first row found in the internal table is read whose left-aligned content matches the content of the data object dobj. The data object dobj expects only flat data types. In the search, the start of table rows that are longer than the data object dobj are handled as if they have the same data type dobj (casting).

Flat
Property of a data type, where the content of its data objects represents the actual work data. All elementary data types except string and xstring are flat. See also deep.

Re: Tabelle von nicht-strukturiertem Typ auf Inhalt prüfen

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Ein weiteres Beispiel dafür, dass die SAP eine kurze, knackige und übersichtliche Notation als veraltet kennzeichnet und eine längere, die keine Übersichtlichkeitsvorteile bringt (eher das Gegenteil), für allein zeitgemäß erklärt.

Seite 1 von 1

Vergleichbare Themen

7
Antw.
21654
Views
Interne Tabelle generell auf Inhalt prüfen
von Michi » 03.12.2007 12:13 • Verfasst in ABAP® für Anfänger
3
Antw.
7183
Views
Inhalt Tabelle DEVACCESS
von Matthias_L. » 24.10.2006 20:03 • Verfasst in Basis
1
Antw.
1923
Views
Inhalt in Tabelle schreiben
von Belerophon » 12.12.2005 16:00 • Verfasst in Web-Dynpro, BSP + BHTML
1
Antw.
4389
Views
Inhalt einer Tabelle kopieren?
von JetGum » 13.08.2007 16:55 • Verfasst in ABAP® für Anfänger
3
Antw.
3656
Views
Interne Tabelle (Inhalt innerhalb der Anwendung)
von wexpress » 31.08.2007 08:30 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor einer Stunde von tar 21 / 1387
Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 22 / 2792
Daten an Tabelle binden
vor 8 Stunden von Lukas Sanders 2 / 869
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 426

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor einer Stunde von tar 21 / 1387
Dialog-Container mit Toolbar/Status
vor 3 Stunden von DeathAndPain gelöst 22 / 2792
Daten an Tabelle binden
vor 8 Stunden von Lukas Sanders 2 / 869
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 426

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2461
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9046