Bedingung für Zeichenstelle aus einem Namen in Tabelle

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

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

Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Hallo Leute,

mein Problem ist folgendes:

Ich möchte eine Bedingung über bestimmte Zeichenstellen eines Namens definieren.
Also i-wie so:

Code: Alles auswählen.

If Tabelle-Feld Stelle 2 des Namens = '1' ......
 

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


Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Upps, aus Versehen schon veröffentlicht

Wäre toll wenn jemand eine Idee hat, kenne die ganzen Befehle nocht nicht so.

Grüße Patryk

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Im einfachsten Fall den Namen des Feldes in eine Variable lesen (Stichworte ABAP & RTTI) und dann

Code: Alles auswählen.

If Feldname+1(1) = '1'

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
das klappt nicht so recht bei mir, bitte um Beispiel :)

Habe den Feldnamen odsobject und möchte an Zweiter Stelle nach der Ziffer 1 filtern.

Also :

Code: Alles auswählen.

If odsobject+1(1) ='1'...
Das funktioniert bei mir nicht...
Habe das odsobject als Variable angegeben.

Code: Alles auswählen.

odsobject TYPE ty_rsdodso
Grüße

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Moment mal: Willst du jetzt nach der 2ten Stelle des Namens der Variable abfragen oder nach der 2ten Stelle des Inhalts?
Das ist ein nicht unwesentlicher Unterschied... :D

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
ich möchte nach der zweiten STelle des Namens abfragen, also falls die zweite Stelle des Namens eine '1' beinhaltet, will ich mir diese dann ausgeben..das ist doch möglich oder?

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

hast du das zu prüfende Tabellenfeld an die Prüfvariable übergeben?

Wenn ich dich jetzt richtig verstehe hast du in odsobject einen namen drin der z.b. so aussieht: 01as23ds45 , richtig?
Dann musst du das Tabellenfeld in der der Name steht an deine Prüfvariable übergeben.
also:

Code: Alles auswählen.

odsobject = tabelle-odsobject.
und dann müsste:

Code: Alles auswählen.

IF odsobject+1(1) = 1.
Nebenbei:
Hast du denn verstanden was das "+1(1)" bedeutet?
Gruß,
der Matze

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
ja das +1 markiert praktisch meine 2te Stelle und (1) dass es nur genau die eine Stelle prüft.
Nur das mit der Prüfvariable habe ich nicht ganz verstanden ist es denn richtig zu schreiben

odsobject TYPE ty_rsdodso, wobei ty_rsdodso selbst deklariert ist und hierbei odsobject TYPE rsdodso-odsobject deklariert wurde...

Sorry wenn ich mich dumm anstelle aber habe sowas noch nie gemacht.

Gruß

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

ja grob gesagt stimmt das. +1 Setzt den Such-Cursor hinter die erste Stelle, deshalb +1 und (1) gibt an auf welcher Länger der Name untersucht wird, also in dem Fall nur das nächste Zeichen.

Deine Typen-Deklaration kann ich nicht so ganz nach vollziehen.
Es gibt im SAP die transp. Tabelle RSDODSO, welche das Feld ODSOBJECT enthält. Dadurch kannst du deine prüfvariable odsobject direkt deklarieren als:

Code: Alles auswählen.

DATA: odsobject TYPE RSDODSO-ODSOBJECT
oder noch direkter, wenn du dich direkt auf das Datenelement des Feldes beziehst:

Code: Alles auswählen.

DATA: odsobject TYPE rsdodsobject
Danach schreibst du dann vorher angegebenen Code, in dem du den Wert (vermutlich aus einem Loop oder Read Table) an die Variable übergibst.

also angenommen deine Tabelle heißt lt_TABLE01 und du liest nur eine Zeile darin, dann machst du nur folgendes:

Code: Alles auswählen.

READ TABLE lt_table01 INTO ls_table01 INDEX 1.
odsobject = ls_tabl01-odsobject.
IF odsobject+1(1) = 1.
...
ENDIF.
Ich hoffe ich konnte dir deine Frage damit beantworten.

Du stellst dich ned dumm an, du erklärst deine Gegebenheiten nur etwas umständlich. ;)
Gruß,
der Matze

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
hier noch meine 10cent:

Wenn man innerhalb einer Tabelle nach der zweiten Stelle des Namens sucht, gehts auch ohne die Hilfsvariable:

Code: Alles auswählen.

LOOP AT lt_table01 ASSIGNING <ls_line01> WHERE name+1(1) EQ '1'.
" Whatever
ENDLOOP.
BTW. Ich würde bei

Code: Alles auswählen.

IF odsobject+1(1) = 1.
das = 1 unter Hochkomma setzen.
Also

Code: Alles auswählen.

IF odsobject+1(1) = '1'.
damit man es leichter als Textvergleich erkennen kann.

lg ADT
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: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Ich stell mich doch blöd an bekomme es nicht auf die Reihe, ich weiss dass in meiner Logik i-was falsch ist aber ich versteh nich was ...
Hier mal der ganze Code , wobei die Select-Anweisungen ignoriert werden können.

Code: Alles auswählen.

TYPE-POOLS: vrm.

TYPES:
       BEGIN OF ty_rsdodso,
         odsobject TYPE rsdodso-odsobject,
         objvers TYPE rsdodso-objvers,
         txtlg TYPE rsdodsot-txtlg,
       END OF ty_rsdodso,

       BEGIN OF ty_rsdodsot,
         txtlg TYPE rsdodsot-txtlg,
       END OF ty_rsdodsot.


DATA:
          l_s_rsdodso TYPE ty_rsdodso,
          l_t_rsdodso TYPE STANDARD TABLE OF ty_rsdodso,

          l_s_rsdodsot TYPE ty_rsdodsot,
          l_t_rsdodsot TYPE STANDARD TABLE OF ty_rsdodsot,

          param TYPE vrm_id,
          values TYPE vrm_values,
          value LIKE LINE OF values,

          odsobject TYPE rsdodso-odsobject.




FIELD-SYMBOLS:
          <rsdodso_fields> TYPE ty_rsdodso,
          <rsdodsot_fields> TYPE ty_rsdodsot.

SELECT-OPTIONS: so_odsob FOR <rsdodso_fields>-odsobject.



PARAMETERS: layer(30)  AS LISTBOX VISIBLE LENGTH 30,
            modul(30)  AS LISTBOX VISIBLE LENGTH 30,
            gruppe(30) AS LISTBOX VISIBLE LENGTH 30.

AT SELECTION-SCREEN OUTPUT.

  param = 'layer'.
  value-key = 'L01'.
  value-text = 'Layer 1 Extraktion'.
  APPEND value TO values.
  value-key = 'L02'.
  value-text = 'Layer 3 Harmonisierung'.
  APPEND value TO values.
  value-key = 'L03'.
  value-text = 'Layer 5 Datamart'.
  APPEND value TO values.
  value-key = 'L04'.
  value-text = 'Layer 7 Präsentation'.
  APPEND value TO values.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

  Refresh values.


  param = 'modul'.
  value-key = 'M01'.
  value-text = 'Modul CO'.
  APPEND value TO values.
  value-key = 'M02'.
  value-text = 'Modul CP'.
  APPEND value TO values.
  value-key = 'M03'.
  value-text = 'Modul CS'.
  APPEND value TO values.
  value-key = 'M04'.
  value-text = 'Modul DP'.
  APPEND value TO values.
  value-key = 'M05'.
  value-text = 'Modul FI'.
  APPEND value TO values.
  value-key = 'M06'.
  value-text = 'Modul HR'.
  APPEND value TO values.
  value-key = 'M07'.
  value-text = 'Modul LE'.
  APPEND value TO values.
  value-key = 'M07'.
  value-text = 'Modul MD'.
  APPEND value TO values.
  value-key = 'M08'.
  value-text = 'Modul MM'.
  APPEND value TO values.
  value-key = 'M09'.
  value-text = 'Modul PM'.
  APPEND value TO values.
  value-key = 'M10'.
  value-text = 'Modul PP'.
  APPEND value TO values.
  value-key = 'M11'.
  value-text = 'Modul PS'.
  APPEND value TO values.
  value-key = 'M12'.
  value-text = 'Modul QM'.
  APPEND value TO values.
  value-key = 'M13'.
  value-text = 'Modul SD'.
  APPEND value TO values.
  value-key = 'M14'.
  value-text = 'Modul SN'.
  APPEND value TO values.
  value-key = 'M15'.
  value-text = 'Modul TD'.
  APPEND value TO values.


  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

Refresh values.

param = 'gruppe'.
  value-key = 'G01'.
  value-text = 'Gruppe SL'.
  APPEND value TO values.
  value-key = 'G02'.
  value-text = 'Gruppe BI'.
  APPEND value TO values.
  value-key = 'G03'.
  value-text = 'Gruppe SH'.
  APPEND value TO values.
  value-key = 'G04'.
  value-text = 'Gruppe PU'.
  APPEND value TO values.
    value-key = 'G05'.
  value-text = 'Gruppe IM'.
  APPEND value TO values.
  value-key = 'G06'.
  value-text = 'Gruppe GL'.
  APPEND value TO values.
  value-key = 'G07'.
  value-text = 'Gruppe AP'.
  APPEND value TO values.
  value-key = 'G08'.
  value-text = 'Gruppe AR'.
  APPEND value TO values.
    value-key = 'G09'.
  value-text = 'Gruppe OM'.
  APPEND value TO values.
  value-key = 'G09'.
  value-text = 'Gruppe PC'.
  APPEND value TO values.
 value-key = 'G10'.
  value-text = 'Gruppe 0G'.
  APPEND value TO values.
    value-key = 'G11'.
  value-text = 'Gruppe PA'.
  APPEND value TO values.
  value-key = 'G12'.
  value-text = 'Gruppe PT'.
  APPEND value TO values.
  value-key = 'G13'.
  value-text = 'Gruppe PY'.
  APPEND value TO values.
  value-key = 'G14'.
  value-text = 'Gruppe TA'.
  APPEND value TO values.

CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      id     = param
      values = values.

START-OF-SELECTION.


PERFORM infos.
    READ TABLE l_t_rsdodso INTO l_s_rsdodso INDEX 1.
    odsobject = l_s_rsdodso-odsobject.
    IF odsobject+3(1) = 1.
      PERFORM ausgabe.
    ENDIF.


*&---------------------------------------------------------------------*
*&      Form  infos
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM infos.

  SELECT rsdodso~odsobject txtlg rsdodso~objvers
     INTO  CORRESPONDING FIELDS OF TABLE l_t_rsdodso
      FROM rsdodso INNER JOIN rsdodsot ON rsdodsot~odsobject = rsdodso~odsobject
    WHERE rsdodso~objvers = 'A' AND rsdodso~odsobject in so_odsob.
ENDFORM.                    "infos

*&---------------------------------------------------------------------*
*&      Form  ausgabe
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ausgabe.

  LOOP AT l_t_rsdodso ASSIGNING <rsdodso_fields> .
    WRITE:/ <rsdodso_fields>-odsobject,
            <rsdodso_fields>-txtlg,
            <rsdodso_fields>-objvers.
  ENDLOOP.
ENDFORM.                    "ausgabe

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Hi!

Ich würds so machen:

Code: Alles auswählen.

DELETE l_t_rsdodso WHERE odsobject+3(1) <> '1'.
PERFORM ausgabe.
Wenn ich dein Coding richtig verstanden habe, möchtest du nur jene Einträge anzeigen die an der 4ten Stelle eine '1' stehen haben. Also einfach weg mit dem Rest.

Alternativ, wenn du die anderen Daten eventuell doch noch brauchst, kannst du diese Abfrage auch im LOOP deiner Ausgabe machen:

Code: Alles auswählen.

LOOP AT l_t_rsdodso ASSIGNING <rsdodso_fields> WHERE odsobject+3(1) = '1'.
  " Ausgabe.
endloop.
lg ADT

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

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: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hey,

was genau läuft denn bei dir gegen die Wand? Ist die Tabelle leer?
Benötigen deine perform aufrufe vielleicht übergabe-parameter (import, export, changing, returning) ?
Hast du das Programm gedebuggt?
So an und für sich ist es nicht sehr offensichtlich ob und wenn ja wo da ein Fehler ist. Ansonsten würde ich die Zuweisung so machen, wie ADT sie vorgeschlagen hat.
Gruß,
der Matze

Re: Bedingung für Zeichenstelle aus einem Namen in Tabelle

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Vielen Dank Leute und einen besonderen Dank an ADT, so hat es wunderbar funktioniert!

Grüße Patryk

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1752
Views
Select aus einer Tabelle mit Bedingung aus weiteren Tabelle
von Dyrdek » 02.01.2017 13:16 • Verfasst in ABAP® für Anfänger
2
Antw.
2251
Views
in eine interne tabelle schreiben mit where bedingung.
von swonny » 22.12.2006 12:50 • Verfasst in ABAP® für Anfänger
5
Antw.
2604
Views
2
Antw.
1920
Views
Generische Namen für Flatfiles
von miramar » 08.01.2007 15:36 • Verfasst in Sonstige Module
0
Antw.
1082
Views
Ermitteln von technischen Namen
von patlau » 15.04.2013 08:46 • Verfasst in ABAP® für Anfänger

Ü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

Bedarfszusammenfassung "Einzelbedarfe"
vor 3 Stunden von harri 2 / 1187
Trennen Strasse und Hausnummer
vor 5 Stunden von ralf.wenzel 21 / 11296
Dialog-Container mit Toolbar/Status
Gestern von black_adept gelöst 27 / 4386

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

Bedarfszusammenfassung "Einzelbedarfe"
vor 3 Stunden von harri 2 / 1187
Trennen Strasse und Hausnummer
vor 5 Stunden von ralf.wenzel 21 / 11296
Dialog-Container mit Toolbar/Status
Gestern von black_adept gelöst 27 / 4386

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
Gestern von ArjenR 1 / 260
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3187
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9778