|  | 
|   | 
 | 
| - Seite 1 - | 
 
  | 
  RudiB. | Habe mal ein bischen mit String-Funktionen rumgebastelt. Hier das Ergebnis:
  FindCharAll
  gibt alle Positionen des Zeichens / Zeichenkette aus TestString$ Aufruf: FindCharAll TestString$,Suchzeichen/kette,leeres Int-Array Rückgabewert: Array mit den Positionen im String aller gefundenen Zeichen.
  CountChar
  zählt alle Suchzeichen/ketten aus TestString$ Aufruf: CountChar TestString$,Suchzeichen/kette Rückgabewert: Anzahl der gesuchten Zeichen im String.
  FindLastChar
  gibt die Position des letzten gesuchten Zeichen/kette in TestString$ an- Aufruf: FindLastChar TestString$, Suchzeichen/kette Rückgabewert: Position im TestString
  FindPosChar
  Finde Position des N.ten Zeichen/Zeichenkette im TestString$ Aufruf: FindPosChar TestString$,N.tes Zeichen,Such_Zeichen$ Rückgabewert: Postion des N.ten Zeichens/kette im TestString.
  Hier ein kleines Testprogramm...
 CLS
'Befehle
'--------------
'findcharall(zeichen) >> Array - Anzahl der zeichen / Position des Zeichens in STRING
'findfirstchar(zeichen) >> position des zeichens im STRING  --- wie INSTR
'findlastchar(zeichen) >> position des letzten zeichens im STRING
'findposchar(zeichen,z.B das 3.te zeichen im STRING)
'countchar(zeichen) >> anzahl der zeichen im STRING
Declare TestString$,_Suchzeichen%[],Such_Zeichen$,z%,zaehler%,last&
TestString$="Im üblichen Dezimalsystem werden die Ziffern 0 bis 9 verwendet. Im Dualsystem hingegen werden Zahlen nur mit den Ziffern des Wertes null und eins dargestellt."
CLS
' Finde alle Zeichen/Zeichenketten in Teststring
Such_Zeichen$="f"
FindCharAll TestString$,Such_Zeichen$,_Suchzeichen%[]
Print "Befehl: FindCharAll"
Print
Print "gibt alle Positionen des Zeichens / Zeichenkette aus TestString$"
Print
Print "Aufruf -- FindCharAll TestString$,Such_Zeichen$,_Suchzeichen%[] (leeres Array)"
Print
Print "TestString :"+TestString$
Print "Suchzeichen ist: -"+Such_Zeichen$+"-"
Print
Print
Print "Taste drücken...."
auswerten
Waitinput
CLS
' Zaehle alle Zeichen/Zeichenkette aus Teststring
zaehler%=CountChar(TestString$,"e")
Print "Befehl: CountChar"
Print
Print "Zählt alle gesuchten Zeichens / Zeichenkette aus TestString$"
Print
Print "Aufruf -- CountChar TestString$,Such_Zeichen$"
Print
Print "TestString :"+TestString$
Print "Suchzeichen ist: "+"-e-"
Print zaehler%+ " mal ist das -e- im Teststring enthalten."
Print
Print
Print "Taste drücken...."
Waitinput
CLS
' Finde Position für das letzte Zeichen/Zeichenkette in Teststring
zaehler%=FindLastChar(TestString$,"f")
Print "Befehl: FindLastChar"
Print
Print "gibt letzte Positionen des gesuchten Zeichens / Zeichenkette aus TestString$"
Print
Print "Aufruf -- FindLastChar TestString$,Such_Zeichen$"
Print
Print "TestString :"+TestString$
Print "Suchzeichen ist: "+"-f-"
print "das letzte Zeichen/Zeichenkette -f- ist an Position "+str$(zaehler%)+" im Testsrting."
Print
Print
Print "Taste drücken...."
Waitinput
CLS
' Finde 3.tes Zeichen/Zeichenkette im TestString
zaehler%=FindPosChar(TestString$,3,"m")
Print "Befehl: FindPosChar"
Print
Print "Finde N.te Zeichen/Zeichenkette im TestString$"
Print
Print "Aufruf -- FindPosChar TestString$,N.tes Zeichen,Such_Zeichen$"
Print
Print "TestString :"+TestString$
Print "N.tes Zeichen ist 3"
Print "Suchzeichen ist: "+"-m-"
print "das 3.te gesuchte Zeichen/Zeichenkette -m- ist an Position "+str$(zaehler%)+" im Testsrting."
Print
Print
Print "Für Ende Taste drücken...."
waitinput
End
'--------------------------------------------------------------------------------------------
Proc CountChar
    Parameters _String$,_Zeichen$
    Declare _pos&,_zaehler&
    _pos&=0
    _zaehler&=0
    Whileloop LEN(_String$)
        _pos&=Instr(_Zeichen$,_String$)
        If _pos&>0
            Inc _zaehler&
        Else
            Break
        EndIf
        _String$=Right$(_String$, Len(_String$)-_pos&)
    EndWhile
    Return _zaehler&
EndProc
Proc FindCharAll
    Parameters _String$,_Zeichen$,_Char%[]
    Declare _pos&,_zaehler&,Array_zaehler&
    _pos&=0
    _zaehler&=0
    Array_zaehler&=0
    Whileloop LEN(_String$)
        Inc Array_zaehler&
        _pos&=Instr(_Zeichen$,_String$)
        If _pos&>0
            _zaehler&=_zaehler&+_pos&
            _Char%[Array_zaehler&]=_zaehler&
        Else
            Break
        EndIf
        _String$=Right$(_String$, Len(_String$)-_pos&)
    EndWhile
    Return _Char%[]
EndProc
Proc FindLastChar
    Parameters _String$,_Zeichen$
    Declare _Zeichen&[],_pos&,_Char%[],_zaehler&
    Whileloop LEN(_String$)
        _pos&=Instr(_Zeichen$,_String$)
        If _pos&>0
            _zaehler&=_zaehler&+_pos&
            _String$=Right$(_String$, Len(_String$)-_pos&)
            _pos&=0
        Else
            Break
        EndIf
    EndWhile
    Return _zaehler&
EndProc
Proc FindPosChar
    Parameters _String$,N_Zeichen&,_Zeichen$
    Declare _pos&,_zaehler&,Array_zaehler&,_Char%[]
    _pos&=0
    _zaehler&=0
    Array_zaehler&=0
    Whileloop LEN(_String$)
        Inc Array_zaehler&
        _pos&=Instr(_Zeichen$,_String$)
        If _pos&>0
            _zaehler&=_zaehler&+_pos&
            _Char%[Array_zaehler&]=_zaehler&
        Else
            Break
        EndIf
        If Array_zaehler&=N_Zeichen&
            Break
        Endif
        _String$=Right$(_String$, Len(_String$)-_pos&)
    EndWhile
    Return _zaehler&
EndProc
Proc Auswerten
    z%=0
    Whileloop SizeOf(_Suchzeichen%[])-1
        inc z%
        print "Zeichen **"+mid$(TestString$,_Suchzeichen%[&loop],1)+"** Nr.:",z%,"An Position: ";_Suchzeichen%[&loop]
    EndWhile
    ArrDel _Suchzeichen%[],0,SizeOf(_Suchzeichen%[])-1'Arraygrösse wird auf 1 gesetzt.
EndProc
 |  
  | 
|   | 
 | Xprofan X4 Rudolf Beske / München
  Hardware: NB Intel I9 - 16GByte RAM  | 12.05.2021  ▲ |  
  | 
|   | 
 
 
  | 
  | 
« Dieser Beitrag wurde als Lösung gekennzeichnet. » | 
 | 
  p.specht
 
   | %matchpos und das n. Matching ========================= Weils dazupasst, eine Info von RGH aus Sept. 2015 zur richtigen Handhabung der internen Variable %matchpos: "%matchpos zählt immer von der aktuellen Startposition aus! Folgendes proc liefert das gewünschte n-fach {'weitergeschaltete'} Verhalten":
  |  
  | 
|   | 
 | XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...   | 19.05.2021  ▲ |  
  | 
|   | 
  | 
 
 
  |