rightstring-Funktion in ABAP

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

rightstring-Funktion in ABAP

Postby Alva1590 » Thu Dec 05, 2002 2:28 pm

Hi,

weiß jemand ob es eine right-Funktion für Strings im ABAP gibt (wenn man z.B. nur die letzten 5 Zeichen eines Strings benötigt)?
Danke.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Willy1492 » Thu Dec 05, 2002 4:55 pm

Wenn auch eventtuelle Leerzeichen am Ende des Strings relevant sind:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DATA: hilfs_string TYPE string.
  2. hilfs_string = quelle.
  3. SHIFT hilfs_string BY 5 PLACES RIGHT CIRCULAR.
  4. ziel = hilfs_string(5).
  5.  
GeSHi ©

Wenn Leerzeichen am Ende ignoriert werden sollen, noch eine Anweisung
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. SHIFT hilfs_string RIGHT DELETING TRAILING space.
  2.  
GeSHi ©

an der richtigen Stelle einfügen.
Wenn Dein Zielfeld mindestens so lang ist wie das Quellfeld, kommst Du auch ohne hilfsfeld aus.
Wenn Type STRING in Deinem Release noch nicht geht, ein C-Feld mit bis zu 65535 Bytes Länge definieren.
Oder falls quelle (zumindest vorübergehend) verändert werden darf - geht aber z.B. für IMPORTING-Parameter von FBs ebensowenig wie für FORMs, denen ein Literal übergeben wird), das SHIFT mit dem Quellfeld veranstalten, SY-FDPOS merken, nach Zuweisung ans Zielfeld wieder zurückschieben.
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Andere Möglichkeit:

Postby Willy1492 » Thu Dec 05, 2002 5:02 pm

Mit Leerzeichen am Ende:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. DESCRIBE FIELD quelle TYPE t LENGTH l.
  2.  
GeSHi ©

Ohne:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. l = strlen( quelle ).
  2.  
GeSHi ©

und dann
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. offset = l -5.
  2. CHECK offset GE 0.
  3. zeil = quelle+offset(5).
  4.  
GeSHi ©

In älteren Releases waren an der Stelle dynamische Offset- und Längenangaben nicht erlaubt.
Ich weiß nicht mehr, wie lange es schon erlaubt ist.
Wenn das bei Dir nicht geht (Syntaxfehler), muß Du entweder noch mit ASSIGN oder mit WRITE arbeiten.
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby Alva1590 » Thu Dec 05, 2002 5:17 pm

Mit offset passt! Klasse, danke!
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Alva1590 » Thu Jan 02, 2003 6:09 pm

Die Offset-/Längenangaben sollten ab Basis Release 4.6D bei den wesentlichen Datentypen unterstützt sein. In älteren Releases kann man sich wahrscheinlich meist mit einem Assign behelfen. Bei diesem Befehl sollten dynamische Offset-/Längenangaben auch in Releases < 4.6D unterstützt sein. Man setzt dann einfach ein Feldsymbol auf die Variable (geht allerdings nicht bei Strings).
Die Lösung mit dem Shift kann ziemlich laufzeitintensiv sein (in vielen Fällen proportional zur Länge des Feldes). Die Offset-/Längen-Variante ist weitgehend unabhändig von der Feldgröße.
Alva1590
.....
.....
 
Posts: 4387
Joined: Mon Dec 02, 2002 3:01 pm

Postby Jessy5246 » Mon Jan 06, 2003 12:40 am

Moin:
offset = l -5.
CHECK offset GE 0.
zeil = quelle+offset(5).


How about:
clear zeil.
length = 5.
offset = l - length.
if offset lt 0.
add offset to length.
endif.
CHECK length GT 0.
zeil = quelle+offset(length).

In case the string is 'ABC', the modified function would at least return what it has.

Regards,
Wolfgang
Jessy5246
..
..
 
Posts: 23
Joined: Tue Dec 03, 2002 8:20 pm

Postby Willy1492 » Mon Jan 06, 2003 10:28 am

Wolfgang G. Propfe hat geschrieben:Moin:
offset = l -5.
CHECK offset GE 0.
zeil = quelle+offset(5).


How about:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. clear zeil.
  2. length = 5.
  3. offset = l - length.
  4. if offset lt 0.
  5.   add offset to length.
  6. CHECK length GT 0.
  7. zeil = quelle+offset&#40;length&#41;.
  8.  
GeSHi ©

In case the string is 'ABC', the modified function would at least return what it has.

Hallo Wolfgang, es kommt hier sicher darauf an, was man will.

clear zeil. ???

Eigentlich wollte ich ziel statt zeil schreiben.
Der Fehler ist mir erst in Deinem Reply aufgefallen.
Und auch erst in der CLEAR-Anweisung, nicht in dem von mir zitierten Quelltext.:)

In Deinem Beispiel fehlt dann aber noch ein
CLEAR offset.
vor dem ENDIF.
Willy1492
....
....
 
Posts: 581
Joined: Tue Dec 03, 2002 4:44 pm

Postby Jessy5246 » Mon Jan 06, 2003 6:24 pm

Dear Frank:
Correct on all counts.

Regards,
Wolfgang
Jessy5246
..
..
 
Posts: 23
Joined: Tue Dec 03, 2002 8:20 pm


Return to ABAP® Core

Who is online

Users browsing this forum: No registered users and 1 guest