nach zeichen zeichenketten suchen

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

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
24 Beiträge • Vorherige Seite 2 von 2 (current)
24 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von Gast ( / / 0 / 3 ) »
es kommt 0 raus, und das countsu ist ein zähler der zählen soll wie oft die zeichen/folge vorkam.

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


Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

würde mich interessieren, ob folgendes Beispielcoding passt.

Report ztsuche.
parameters: p_suche(20) type c lower case obligatory.
data: countsu type i.
data: string type string.
data: itt100 like standard table of t100 with header line.

*******************
start-of-selection.
*******************
select * from t100 into table itt100 up to 1000 rows.
string = p_suche.

loop at itt100.
sy-subrc = 0.
while sy-subrc = 0.
replace string with '' into itt100.
if sy-subrc eq 0. add 1 to countsu. endif.
endwhile.
endloop.

write: /01 string, 'wurde', countsu, 'mal im Text gefunden'.

mfg dele

Beitrag von Gast ( / / 0 / 3 ) »
ne geht nicht. wenn ich it100 etc. durch meine bezeichnungen ersetze kommen laufend fehlermeldungen, dass blabla nicht im abap dictionnary deklariert sei oder so...

Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Hallo Gast,
kannst Du mal Dein Coding komplett posten?
Hallo Dele,
auf die Idee mit dem Replace bin ich garnicht gekommen, gefällt mir.

Frank

Beitrag von Gast ( / / 0 / 3 ) »
hab mal alles rausgelassen was nix mit dem problem zu tun hat. das sollte eigentlich ausreichen.

Code: Alles auswählen.

PARAMETERS: Suche(10) TYPE c.

DATA: BEGIN OF Tabelle OCCURS 0,
      Text(300) TYPE c,
      END OF Tabelle.

DATA: CountSU TYPE i.

DATA: Tabelle2 LIKE TABLE OF Tabelle,
      wa_Tabelle LIKE LINE OF Tabelle,
      wa_Tabelle2 LIKE LINE OF Tabelle.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME = 'C:\Documents and Settings\xxxxxxxxxx\Desktop\text.txt'
    FILETYPE                      = 'ASC'
    HAS_FIELD_SEPARATOR           = ''
*   HEADER_LENGTH                 = 0
*   READ_BY_LINE                  = 'c'
*   DAT_MODE                      = ' '
*   CODEPAGE                      = ' '
*   IGNORE_CERR                   = ABAP_TRUE
*   REPLACEMENT                   = '#'
* IMPORTING
*   FILELENGTH                    =
*   HEADER                        =
  TABLES
    DATA_TAB                      = Tabelle.


Beitrag von GastX (Specialist / 277 / 4 / 18 ) »
Scusi,
aber ich hätte gerne noch mehr, nicht nur das Einlesen der Daten sondern auch Deine bisher implementierte Suche; insbesondere um dieses nachvollziehen zu können:
ne geht nicht. wenn ich it100 etc. durch meine bezeichnungen ersetze kommen laufend fehlermeldungen, dass blabla nicht im abap dictionnary deklariert sei oder so...
Frank R.

Beitrag von Gast ( / / 0 / 3 ) »
nun ich hatte schon diverse verschiedene such"funktionen" drin. bei manchen musste ich noch etwas deklarieren.

Code: Alles auswählen.

*looki = SUCHE.
*ULINE.
*LOOP AT Tabelle2 INTO wa_Tabelle.
*SEARCH wa_Tabelle FOR SUCHE.
**FIND SUCHE IN wa_Tabelle IGNORING CASE.
**SPLIT wa_Tabelle AT SPACE INTO TABLE Tabelle2.
*IF SY-FDPOS = 1.
**IF sy-subrc EQ 0.
*ADD 1 TO CountSU.
*ENDIF.
*ENDLOOP.
*Write: / 'Das Suchkriterium kommt' , CountSU , 'x vor.'.

*ULINE.
*LOOP AT Tabelle2 INTO wa_Tabelle2.
**SPLIT wa_Tabelle2 AT SPACE INTO TABLE Tabelle2.
*FIND SUCHE IN wa_Tabelle2 IGNORING CASE.
*IF sy-subrc EQ 0.
*ADD 1 TO CountSU.
*ENDIF.
*ENDLOOP.
*Write: / 'Das Suchkriterium kommt' , CountSU , 'x vor.'.

*DESCRIBE FIELD Suche LENGTH LAENGE IN CHARACTER MODE.
*POSITION = 0.
*WHILE POSITION < LAENGE.
*  IF Suche+POSITION(1) CO SONDZE.
*    ADD 1 TO CountSU..
* Write: / 'Das Suchkriterium kommt' , CountSU , 'x vor.'.
*  ENDIF.
*  POSITION = POSITION + 1.
*ENDWHILE.

*SONDZE = Suche.
*LOOP.
*SEARCH wa_Tabelle2 FOR Suche.
*SPLIT wa_Tabelle2 AT SPACE INTO TABLE Tabelle2.
*IF SY-SUBRC = 0.
*OFFSET = SY-FDPOS - 1.
*SONDZE = Suche+OFFSET(1).
*ADD 1 TO CountSU.
*Write: / 'Das Suchkriterium kommt' , CountSU , 'x vor.'.
*ELSE.
*WRITE:/ 'nicht gefunden'.
* ENDIF.
*IF sy-subrc EQ 0.
*ADD 1 TO CountSU.
*ENDIF.
*ENDLOOP.
*Write: / 'Das Suchkriterium kommt' , CountSU , 'x vor.'.




******************* 
start-of-selection. 
******************* 
select * from Tabelle into table wa_Tabelle2 up to 1000 rows. 
string = Suche. 

loop at wa_Tabelle2. 
sy-subrc = 0. 
while sy-subrc = 0. 
replace string with '' into wa_Tabelle2. 
if sy-subrc eq 0. add 1 to countsu. endif. 
endwhile. 
endloop. 

write: /01 string, 'wurde', countsu, 'mal im Text gefunden'.

Beitrag von Gast ( / / 0 / 3 ) »
Da Du ein Neuling bist, empfehle ich Dir erst die Syntaxprobleme zu meistern, sonst kommst Du nicht weiter.
Dein Select zum Beispiel kann aus zweierlei Gründen nicht funktionieren
TABELLE ist keine DDIC Tabelle und wenn Du INTO TABLE schreibst, dann darf darauf nur eine interne Tabelle folgen und nicht eine workarea. (In Deinem Fall also Tabelle2).

Wenn Du erfolgreich die Interne Tabelle gefüllt hast, dann versuche Deine Suchfunktion zu implementieren. Schau Dir das Beispiel in der F1 Hilfe zu SEARCH an. Wenn Du nur das Auftreten Deines Suchbegriffes zählen willst, dann brauchst Du kein Replace. SEARCH kann auch über eine ganze Tabelle scannen. Beachte, dass, wenn Du den Suchraum nicht immer verschiebst, Du immer den gleichen Punkt finden wirst.

Im Pseudocode kann eine Suchroutine wie folgt aussehen. Habe leider keine Chance das zu testen oder ein syntax check durchzuführen.

Code: Alles auswählen.

form search_itab using p_pattern type c
                                    pit_source type any table "hier dein TABELLENTYP
                            changing 
                                   p_count type i. 


data: l_subrc like sy-subrc, 
         l_length type i, 
         l_startpos like sy-tabix, 
         l_startline like sy-tabix, 
         lwa_source like pit_source. "FUNKTIONIERT NICHT, WENN KEIN
* expliziten Tabellentyp mitgegeben wird. 

* Ermittle die Länge des Suchstrings
l_length = strlen( p_pattern).
clear p_count

while l_subrc is initial. 
search pit_source for p_pattern starting at l_startline. 
l_subrc = sy-subrc.
if l_subrc is initial. "es wurde was gefunden
 p_count = p_count + 1.
 l_startline = sy-tabix. "Zeile in der was gefunden wurde
 l_startpos = sy-fdpos. 
* es kann sein, dass mit dem search auch die Pos. mitgeben 
* kann  -das geht nicht eindeutig aus der Hlfe hervor, deshalb lese ich 
* die Zeile und suche dort nach WEITEREN trefferen
  read table pit_source into lwa_source index l_startline.
  l_startpos = l_startpos + l_length. "wir wollen ja nicht nochmal
* den gleichen  finden
   while sy-subrc is initial. 
   search lwa_source for p_pattern starting at l_startpos. 
   if sy-subrc is initial. 
     p_count = p_count + 1.
     l_startpos = l_startpos + l_length. "neuer aufsetzpunkt
  endif. 
  endwhile.
  clear l_startpos. 
  l_startline = l_startline + 1.
endwhile. 
endform. 
Bei der Neuerrechnung von l_startline oder l_startpos kann es sein, dass Du prüfen musst, ob die über die Felder bzw. Tabellengrenzen rausläufst. Möglicherweise muss l_starline auch mit 1 initialisiert sein.
Ausserdem kann die inntere Schleife entfallen, wenn SEARCH sowohl die Tabellenzeile als auch den Startpunkt erlaubt. Unter Umständen steht nämlich in SY-FDPOS die Position nicht relativ zum Zeilenanfang sondern zum Tabellenanfang.

Christian

Schnellere Alternative???

Beitrag von Gast ( / / 0 / 3 ) »
Soll nicht zur Verwirrung beitragen, aber hier vielleicht eine schnellere Alternative? Kleines Hipro zur Diskussion!

REPORT XY.

PARAMETERS: Z.

DATA: WA(30) VALUE 'Hallo Welt hier ein String'.
DATA: CHANGE(2).

DATA: X TYPE SY-DBCNT.
DATA: Y TYPE SY-DBCNT.

START-OF-SELECTION.
TRANSLATE Z TO UPPER CASE.
TRANSLATE WA TO UPPER CASE.
CONDENSE WA NO-GAPS.
IF WA CP '*# '.
ENDIF.
X = SY-FDPOS.
CHANGE+0(1) = Z.
TRANSLATE WA USING CHANGE.
CONDENSE WA NO-GAPS.
SEARCH WA FOR ' '.
IF WA CP '*# '.
ENDIF.
Y = SY-FDPOS.
X = X - Y.
WRITE: / X.

Vergleichbare Themen

2
Antw.
13804
Views
Zeichen in eine String suchen
von Handeglo » 18.08.2008 19:50 • Verfasst in ABAP® für Anfänger
3
Antw.
5435
Views
Suchen ein bestimmtes Zeichen in einer String
von lisa » 10.09.2008 00:16 • Verfasst in ABAP® für Anfänger
2
Antw.
362
Views
Zeichenketten verschieben
von mk_02 » 27.03.2022 15:20 • Verfasst in ABAP® für Anfänger
4
Antw.
17244
Views
Zeichenketten verknüpfen
von Preacha » 06.08.2008 13:54 • Verfasst in ABAP® für Anfänger
2
Antw.
2710
Views
Dynamisch Zeichenketten zusammensetzen
von Dudu » 08.07.2005 13:25 • 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

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.