substring direkt in IF

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

substring direkt in IF

Beitrag von pherweg (ForumUser / 6 / 1 / 0 ) »
Hallo,

ich möchte in einem String prüfen, ob an bestimmer Stelle ein Leerzeichen steht.
(Kann man natürlich mit Offset-Operator machen. Z. B. lf_part+9(1). In meinem eigentlichen Fall ist der Offset aber dynamisch und muss erst berechnet werden. Deshalb möchte ich die Funktion substring verwenden, da ich bei off einen Ausdruck angeben kann.)

Nun verwende ich folgende Coding.
In den ersten IF läuft das Programm wie erwartet rein.

Um mir die Deklaration der Variable zu sparen, wollte ich die substring-Funktion gleich in den IF einbauen - so wie beim zweiten IF.
Aber warum läuft das Programm da nicht rein? Ist doch im Prinzip die gleiche Bedingung.

Hat jemand eine Idee?

DATA lf_part TYPE string.
lf_part = '123456789 x'.

DATA sub TYPE string.
sub = substring(
val = lf_part
off = 9
len = 1 ).

IF sub CA ' '.
WRITE 'Enthält an 10. Stelle ein space'.
ENDIF.

IF substring(
val = lf_part
off = 9
len = 1 ) CA ' '.
WRITE 'Warum läuft ABAP hier nicht rein?'.
ENDIF.

Viele Grüße
Peter

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


Re: substring direkt in IF

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

kannst Du die Felder nicht mittels
SPLIT aufteilen?

https://help.sap.com/doc/abapdocu_750_i ... psplit.htm

Gruß Wolfgang

Re: substring direkt in IF

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ich hab mir jetzt nen Wolf probiert - mit subsctring, mit contains, mit matches, sogar unter Verwendung Regulärer Ausdrücke - ich bin hochgradig erstaunt, dass das nicht geht.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: substring direkt in IF

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
das muss wohl am SPACE liegen, habe es gerade mit dem 'x' versucht und da geht es - das ist je echt übel

Code: Alles auswählen.

DATA lf_part TYPE string.
lf_part = '123456789 xB'.

DATA sub TYPE string.
sub = substring( val = lf_part off = 10 len = 1 ).

IF sub CA 'x'.
WRITE ' Enthält an 11. Stelle ein "x"'.
ENDIF.

IF substring( val = lf_part off = 10 len = 1 ) CA 'x'.
 WRITE ' hier läuft er rein '.
ENDIF.

IF substring( val = lf_part off = 08 len = 3 ) CA ' '.
WRITE ' Kaum Abfrage nach Space nicht mehr '.
ENDIF.
/Edwin

Re: substring direkt in IF

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
contains wirft auch eine Ausnahme - substring nicht.

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: substring direkt in IF

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ich kann schon sagen wo hier der (Denk-)Fehler liegt:
' ' ist nicht gleich einem Leerzeichen sondern schlicht "leer".
Korrekt wäre ` `. (= String mit Leerzeichen)

Code: Alles auswählen.

IF substring( val = lf_part off = 08 len = 3 ) CA ` `. "<-- Jetzt sollte das Leerzeichen gefunden werden
WRITE ' Kaum Abfrage nach Space nicht mehr '.
ENDIF.

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

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: substring direkt in IF

Beitrag von pherweg (ForumUser / 6 / 1 / 0 ) »
Hallo,

herzlichen Dank an alle für die vielen Antworten!

@a-dead-trousers: Interessanter Hinweis! Mit ` ` funktioniert die Bedingung tatsächlich.

Um so erstaunlicher scheint es mir, dass die erste IF-Bedingung funktioniert.

Habe jetzt nochmal die Online-Hilfe zum CA-Operator zu Rate gezogen. Dort steht "...Bei Operanden vom Typ string werden die schließenden Leerzeichen berücksichtigt. Wenn in der folgenden Tabelle nicht anders dokumentiert, werden bei Operanden vom Typ c, d, n und t die schließenden Leerzeichen nicht berücksichtigt..."

Meine Theorie:
Erstes IF:
Wenn ich das Ergebnis von substring zuerst in eine String-Variable schreibe, erkennt ABAP beim Auswerten der Bedingung, dass es ein String ist. Da einer der CA-Operanden ein String ist, werden die schließenden Leerzeichen berücksichtigt.
Zweites IF mit ' ':
Wenn ich die substring-Funktion direkt in der Verbindung angebe, weiß ABAP nicht, dass es ein String ist (in der Online-Hilfe zu substring steht nirgends, dass ein string zurückgegeben wird). D. h. beide CA-Operanden sind keine Strings: schließende Leerzeichen werden nicht berücksichtigt.
Zweites IF mit ` `:
Der rechte CA-Operand ist ein String. Da nun wieder einer der CA-Operanden ein String ist, werden die schließenden Leerzeichen berücksichtigt.

Habe mir jetzt testweise eine conv_to_string-Funktion geschrieben, die den Importing-Parameter einfach nur wieder zurückgibt.
...
CLASS-METHODS:
conv_to_string
IMPORTING
if_string TYPE string
RETURNING VALUE(rf_result) TYPE string.
...
Wichtig: Der Rückgabewert ist als String typisiert.

IF lcl_forms=>conv_to_string( substring(
val = lf_part
off = 9
len = 1 ) ) CA ' '.
WRITE 'Hier läuft ABAP rein :)'.
ENDIF.

Dann funktioniert es.

Danke noch mal, und ein schönes Wochenende!

Gruß
Peter

Re: substring direkt in IF

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
a-dead-trousers hat geschrieben:Ich kann schon sagen wo hier der (Denk-)Fehler liegt:
' ' ist nicht gleich einem Leerzeichen sondern schlicht "leer".
Korrekt wäre ` `. (= String mit Leerzeichen)

Code: Alles auswählen.

IF substring( val = lf_part off = 08 len = 3 ) CA ` `. "<-- Jetzt sollte das Leerzeichen gefunden werden
WRITE ' Kaum Abfrage nach Space nicht mehr '.
ENDIF.
Ich habe SPACE genommen....


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: substring direkt in IF

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
wie Ralf schon geschrieben :

Code: Alles auswählen.

IF substring( val = lf_part off = 08 len = 3 ) CA SPACE.
WRITE ' das wird auch nicht gefunden '.
ENDIF.
/Edwin

Re: substring direkt in IF

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
SPACE stammt ja noch von Adolfs Zeiten, als es noch gar keine Strings in ABAP gegeben hat. Ich benutze es sehr gerne (es ist auch minimal performanter, weil Konstanten performanter ausgewertet werden als Literale), aber man muss sich immer vergegenwärtigen, dass SPACE vom Typ (1) TYPE C ist - und damit aus ABAP-Sicht komplett leer (da beim Typ C schließende Leerzeichen in den allermeisten Fällen keine Rolle spielen).

Re: substring direkt in IF

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Also ist SPACE kein Leerzeichen, sondern eine leere Zeichenkette - und hat demzufolge den falschen Namen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: substring direkt in IF

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
ralf.wenzel hat geschrieben:Also ist SPACE kein Leerzeichen, sondern eine leere Zeichenkette - und hat demzufolge den falschen Namen.
Nein. Eine leere Zeichenkette ist das hier: ``

Re: substring direkt in IF

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
ralf.wenzel hat geschrieben:Also ist SPACE kein Leerzeichen, sondern eine leere Zeichenkette - und hat demzufolge den falschen Namen.
Nein - SPACE besteht schon aus einem Leerzeichen. Aber an vielen Stellen werden eben abschließende Leerzeichen ignoriert - und an ebendiesen Stellen wird dann das eine Leerzeichen zum leeren String reduziert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: substring direkt in IF

Beitrag von gtoXX (Specialist / 185 / 34 / 31 ) »
Drum merke : Zur Sicherheit Vergleiche immer typgerecht durchführen ^^
"Code lügt nicht ^^"

Seite 1 von 1

Vergleichbare Themen

7
Antw.
6370
Views
Substring bei SELECT
von cali » 10.05.2006 17:58 • Verfasst in ABAP® Core
2
Antw.
2697
Views
select join substring
von jspranz » 13.11.2017 18:12 • Verfasst in ABAP® für Anfänger
2
Antw.
1785
Views
Kommunikation aus SAP direkt mit SPS
von Helmut Rückert » 15.10.2008 15:45 • Verfasst in ABAP® Core
4
Antw.
2149
Views
ALV direkt auf dem Drucker ausgeben
von SkyHobbit » 16.11.2007 07:44 • Verfasst in ABAP® für Anfänger
4
Antw.
5552
Views
SQL Befehle direkt absetzen
von Nautilus » 21.03.2006 15:53 • Verfasst in Basis

Ü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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 65
Interne Tabelle
vor 6 Tagen von black_adept 2 / 134
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 257

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

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 65
Interne Tabelle
vor 6 Tagen von black_adept 2 / 134
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 257

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 65
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141