Prüfung auf zeichenartigen Typen

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

Prüfung auf zeichenartigen Typen

Beitrag von ABAP_User (Specialist / 146 / 20 / 0 ) »
Hallo!

Ich hab eine Struktur, die die Datentypen String, C, D und I besitzt.
Nun würde ich gerne zentral an einer Stelle alle Umlaute beseitigen. Davor muss ich jedoch auf jedes Feld zugreifen. Das hatte ich mir folgendermaßen gedacht:

Code: Alles auswählen.

  LOOP AT gt_tab ASSIGNING <ls_tab>.
    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE <ls_tab> TO <lv_comp>.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.

      IF <lv_comp> CA umlaute.
        lv_text = <lv_comp>.
        "hier dann Beseitigung der Umlaute
      ENDIF.
...
    ENDDO.
  ENDLOOP.
Das Problem ist jetzt jedoch, dass <lv_comp> auch vom Typ eines nicht zeichenartigen Datentypen sein kann. Dadurch bekomme ich eine Fehlermeldung, da die Operation CA ungültig ist.
Kann ich davor eine Prüfung einschieben, ob <lv_comp> ein zeichenartiger Typ ist? Wenn nicht, wie könnte ich das Problem sonst lösen?

Danke!

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


Re: Prüfung auf zeichenartigen Typen

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
hi!

Du hast zwei Möglichkeiten:
- DESCRIBE FIELD mit zusatz TYPE --> siehe Hilfe
- oder die RTTI (Run Time Type Information) verwenden.

In deinem Fall ist DESCRIBE FIELD sicher besser und schneller umgesetzt. Die RTTI verwendet man wenn man mehr Informationen benötigt als DESCRIBE FIELD bietet, oder wenn man (Run Time Type Creation) verwenden möchte.

lg
ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ABAP_User

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: Prüfung auf zeichenartigen Typen

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »

Code: Alles auswählen.

REPORT.

DATA: descr         TYPE REF TO cl_abap_typedescr.
DATA: test          TYPE syst.

FIELD-SYMBOLS: <fs> TYPE ANY.




END-OF-SELECTION.
  test = syst.
  DO.
* Der Reihe nach alle Felder durchgehen -
    ASSIGN COMPONENT sy-index OF STRUCTURE test TO <fs>.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.

    WRITE:/ 'Position',sy-index, AT (80) <fs> color 1.
    descr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
    WRITE: 'Typekind',descr->type_kind color 4.
    CASE descr->type_kind.
      WHEN ''
*      or cl_abap_typedescr=>TYPEKIND_NUM       " Technisch sind NUMC-Felder Characterfelder -> kein Dump aber sinnlos
*        OR cl_abap_typedescr=>typekind_date    " Technisch sind DATE-Felder Characterfelder -> kein Dump aber sinnlos
*      or cl_abap_typedescr=>TYPEKIND_PACKED
*        OR cl_abap_typedescr=>typekind_time    " Technisch sind TIME-Felder Characterfelder -> kein Dump aber sinnlos
        OR cl_abap_typedescr=>typekind_char
*      or cl_abap_typedescr=>TYPEKIND_HEX       " Könnte auch gehen - aber da gibt es keine Sonderzeichen --> sinnlos
*      or cl_abap_typedescr=>TYPEKIND_FLOAT
*      or cl_abap_typedescr=>TYPEKIND_INT
*      or cl_abap_typedescr=>TYPEKIND_INT1
*      or cl_abap_typedescr=>TYPEKIND_INT2
*      or cl_abap_typedescr=>TYPEKIND_W         " Keine Ahnung - vielleicht - ausprobieren
*      or cl_abap_typedescr=>TYPEKIND_STRUCT1
*      or cl_abap_typedescr=>TYPEKIND_STRUCT2
*      or cl_abap_typedescr=>TYPEKIND_OREF
        OR cl_abap_typedescr=>typekind_string
*      or cl_abap_typedescr=>TYPEKIND_XSTRING   " Könnte auch gehen - aber da gibt es keine Sonderzeichen --> sinnlos
*      or cl_abap_typedescr=>TYPEKIND_DREF
*      or cl_abap_typedescr=>TYPEKIND_CLASS
*      or cl_abap_typedescr=>TYPEKIND_INTF
*      or cl_abap_typedescr=>TYPEKIND_ANY
*      or cl_abap_typedescr=>TYPEKIND_DATA
*      or cl_abap_typedescr=>TYPEKIND_SIMPLE
        OR cl_abap_typedescr=>typekind_clike    " Kommt das wirklich vor bei "describe_by_data"?  Sicherheitshalber mitnehmen
        OR cl_abap_typedescr=>typekind_csequence" Kommt das wirklich vor bei "describe_by_data"?  Sicherheitshalber mitnehmen
*      or cl_abap_typedescr=>TYPEKIND_XSEQUENCE
*      or cl_abap_typedescr=>TYPEKIND_NUMERIC
*      or cl_abap_typedescr=>TYPEKIND_TABLE
*      or cl_abap_typedescr=>TYPEKIND_IREF
  .

        WRITE 'Replace possible' COLOR 5.
        CLEAR <fs> WITH 'X'.
        WRITE (80) <fs>.
    ENDCASE.


  ENDDO.

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1470
Views
Generische Typen
von Elcin » 16.08.2016 15:28 • Verfasst in ABAP® für Anfänger
4
Antw.
5611
Views
Generische Typen in OO
von christop » 16.06.2008 10:07 • Verfasst in ABAP® für Anfänger
2
Antw.
1452
Views
Message typen im PBO
von JohnLocklay » 09.12.2016 11:44 • Verfasst in ABAP® für Anfänger
2
Antw.
2808
Views
quan typen
von kostonstyle » 28.08.2008 11:22 • Verfasst in ABAP® für Anfänger
4
Antw.
1775
Views
Konvertierung von Typen
von Neko » 28.08.2018 14:55 • Verfasst in ABAP® Core

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.