String nach erstem Auftreten von hinten durchsuchen

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

String nach erstem Auftreten von hinten durchsuchen

Beitrag von wexpress (ForumUser / 19 / 1 / 0 ) »
Hallo Community

Wie kriege ich es hin wenn ich eine Telefonnummer habe und nur die Extension hier im ersten Beispiel die Nummer 12345 für die Weiterverarbeitung benötige?

Die Telefonnummer können folgendermaßen aussehen.

+49-0634-63-12345
+48-06366 1245
63-123457

Ich müsste somit immer entweder nach dem ersten Bindestrich oder erstem Leerstrich von hinten suchen.

thx
..::Wer andern eine Grube gräbt, hat meist ein Grubengrabgerät::..

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


Beitrag von ewx (Top Expert / 4848 / 312 / 642 ) »

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.     
Gruß,
Enno

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Alternativ

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
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben:Alternativ
Die Alternative verhält sich bei Telefonnummern ohne '-' anders als Ennos Variante.
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

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Anonymous hat geschrieben:Die Alternative verhält sich bei Telefonnummern ohne '-' anders als Ennos Variante.
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?

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
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
M.E. ist das nicht korrekt. Siehe in der Vergleichsroutine die 3. Zeile.
Deine kürzere Variante funktioniert, solange als Trennzeichen vor der Durchwahl wirklich ein "-" steht. Falls hingegen mit " " getrennt wurde klappts leider nicht mehr. :(
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

dann so:

Code: Alles auswählen.

CLEAR trenn.
IF telefon CA '-'.
  trenn = '-'.
ENDIF.
SPLIT telefon AT trenn INTO TABLE itab.
READ TABLE itab INDEX: 1, sy-tfill.
lg Andreas

Beitrag von black_adept (Top Expert / 4090 / 127 / 940 ) »
Hi Andreas,

das geht auch nicht:

Beispiel:

0190-812 123 12
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von wexpress (ForumUser / 19 / 1 / 0 ) »
danke euch - die ersten beiden lösungen sind perfekt
..::Wer andern eine Grube gräbt, hat meist ein Grubengrabgerät::..

Seite 1 von 1

Vergleichbare Themen

10
Antw.
5141
Views
ABAP String von hinten.
von Django90 » 25.09.2017 09:50 • Verfasst in ABAP® für Anfänger
9
Antw.
5142
Views
STring nach LF/CR und LF bzw. CR durchsuchen
von bechi » 02.08.2006 16:22 • Verfasst in ABAP® Core
5
Antw.
4457
Views
Verzeichnis durchsuchen
von Daniel01 » 17.01.2005 08:11 • Verfasst in ABAP® Core
6
Antw.
2690
Views
Dateipfad durchsuchen
von SKAMS » 24.01.2005 11:33 • Verfasst in ABAP® Core
4
Antw.
2991
Views
Varianten durchsuchen?
von ginotico » 22.07.2008 15:40 • Verfasst in Human Resources

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 8 Stunden von black_adept gelöst 23 / 3602
User Exit EXIT_RQCPRM10_001
vor 8 Stunden von a-dead-trousers 2 / 219
Trennen Strasse und Hausnummer
vor 14 Stunden von payten 13 / 10556
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1269

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

Dialog-Container mit Toolbar/Status
vor 8 Stunden von black_adept gelöst 23 / 3602
User Exit EXIT_RQCPRM10_001
vor 8 Stunden von a-dead-trousers 2 / 219
Trennen Strasse und Hausnummer
vor 14 Stunden von payten 13 / 10556
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1269

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2819
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9399