Code: Alles auswählen.
DATA tel(30) VALUE '+49-2345-234-3112'.
DATA len TYPE i.
WRITE: AT /1 'Telefonnummer:', tel.
SHIFT tel RIGHT DELETING TRAILING space.
len = STRLEN( tel ).
DO len TIMES.
SHIFT tel RIGHT CIRCULAR BY 1 PLACES.
IF tel(1) CA '- '.
tel = tel+1(sy-index).
EXIT.
ENDIF.
ENDDO.
WRITE: AT /1 'Durchwahl: ', tel.
Code: Alles auswählen.
FORM finde_durchwahl USING p_telefon
CHANGING p_durchwahl.
DATA: length TYPE i.
p_durchwahl = p_telefon.
length = strlen( p_durchwahl ).
WHILE length > 0 AND p_durchwahl(length) CA ' -'.
SPLIT p_durchwahl AT p_durchwahl+sy-fdpos(1)
INTO p_durchwahl p_durchwahl.
length = strlen( p_durchwahl ).
ENDWHILE.
WRITE:/ 'Tel.:',p_telefon,
AT 40 'Durchwahl:',p_durchwahl.
ENDFORM. " finde_durchwahl
Die Alternative verhält sich bei Telefonnummern ohne '-' anders als Ennos Variante.black_adept hat geschrieben:Alternativ
Code: Alles auswählen.
FORM finde_durchwahl USING p_telefon
CHANGING p_durchwahl.
DATA: itab TYPE table OF string.
SPLIT p_telefon AT '-' INTO TABLE itab.
READ TABLE itab INTO p_durchwahl INDEX: 1, sy-tfill.
WRITE:/ 'Tel.:',p_telefon,
AT 40 'Durchwahl:',p_durchwahl.
ENDFORM. " finde_durchwahl
Auf meinem Minisap nicht: Folgende Beispiele (1. Zeile meine Version, 2. Zeile Enno, 3. Zeile deine Version ) liefern alle dasselbe Ergebnis in den ersten beiden Zeilen. Hast du ein Beispiel wo es sich anders verhält?Anonymous hat geschrieben:Die Alternative verhält sich bei Telefonnummern ohne '-' anders als Ennos Variante.
Code: Alles auswählen.
REPORT.
DATA: durchwahl TYPE char40.
PERFORM finde_durchwahl USING '+49-0634-63-12345 '
CHANGING durchwahl.
PERFORM finde_durchwahl USING '-'
CHANGING durchwahl.
PERFORM finde_durchwahl USING '+48 06366 1245'
CHANGING durchwahl.
PERFORM finde_durchwahl USING '63-123457'
CHANGING durchwahl.
PERFORM finde_durchwahl USING '123457'
CHANGING durchwahl.
PERFORM finde_durchwahl USING '+48063661245'
CHANGING durchwahl.
*&---------------------------------------------------------------------*
*& Form finde_durchwahl
*&---------------------------------------------------------------------*
FORM finde_durchwahl USING p_telefon
CHANGING p_durchwahl.
DATA: length TYPE i.
FORMAT COLOR 1 INTENSIFIED OFF.
p_durchwahl = p_telefon.
length = strlen( p_durchwahl ).
WHILE length > 0 AND p_durchwahl(length) CA ' -'.
SPLIT p_durchwahl AT p_durchwahl+sy-fdpos(1)
INTO p_durchwahl p_durchwahl.
length = strlen( p_durchwahl ).
ENDWHILE.
WRITE:/ 'Tel.:',p_telefon,
AT 40 'Durchwahl:',p_durchwahl.
DATA tel(30) .
DATA len TYPE i.
FORMAT COLOR 2 INTENSIFIED OFF.
tel = p_telefon.
WRITE: AT /1 'Tel.:', tel.
SHIFT tel RIGHT DELETING TRAILING space.
len = strlen( tel ).
DO len TIMES.
SHIFT tel RIGHT CIRCULAR BY 1 PLACES.
IF tel(1) CA '- '.
tel = tel+1(sy-index).
EXIT.
ENDIF.
ENDDO.
WRITE: AT 40 'Durchwahl:', tel.
FORMAT COLOR 4 INTENSIFIED OFF.
DATA: itab TYPE table OF string.
SPLIT p_telefon AT '-' INTO TABLE itab.
READ TABLE itab INTO p_durchwahl INDEX: 1, sy-tfill.
WRITE:/ 'Tel.:',p_telefon,
AT 40 'Durchwahl:',p_durchwahl.
ULINE.
ENDFORM. " finde_durchwahl
M.E. ist das nicht korrekt. Siehe in der Vergleichsroutine die 3. Zeile.Anonymous hat geschrieben:
Wenn das so gewollt ist, geht es auch mit weniger Code (man könnte aber noch die FORM-Schnittstelle typisieren):Code: Alles auswählen.
FORM finde_durchwahl USING p_telefon CHANGING p_durchwahl. DATA: itab TYPE table OF string. SPLIT p_telefon AT '-' INTO TABLE itab. READ TABLE itab INTO p_durchwahl INDEX: 1, sy-tfill. WRITE:/ 'Tel.:',p_telefon, AT 40 'Durchwahl:',p_durchwahl. ENDFORM. " finde_durchwahl