Zeichenkette

iq1979

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich stehe voll auf dem Schlauch ich soll eine Funktion schriebn in ST "wie oft die Zeichenfolge "ZCH" in der Zeichenkette "Text" mit maximal 200 Zeichen vorkommt.
 
Es gibt diverse Stringfunktionen in ST, diese kannst du nutzen.
Mal so kurz als Idee, wie ich es angehen würde:

1. String umkopieren in Arbeitsvariable, Zählvariable auf 0 setzen
2. Schleife, solange die Stringlänge ("Len") > 3 und
3. Funktion "Find" --> sucht das erste Vorkommen und gint doie Position aus
4. wenn Zeichenkette gefunden, Zählvariable +1 hochzählen
5. "Delete" (oder auch "Right")--> löschen der Zeichen bis zur ersten Fundstelle + 3 (ZCH sind 3 Zeichen)
6. Rücksprung zum Schleifenanfang

Ist das ganze durchgelaufen enthält die Zählvariable einen Wert von 0 ... für dier Anzahl der gefundenen Zeichenketten.

Das Ganze kann man auch sehr schön in einer Funktion kapseln, als Input eine Freigabe, den String und die zu duchende Zeichenkette, als Output die Anzahl der gefunden Zeichenketten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich stehe vor der gleichen Aufgabe wie oben iq1979.
Kann mir jemand zu den Denkanstößen von Ralle noch weitere geben, komme damit noch nicht ganz auf die Lösung:confused:

Danke schonmal
 
Denkanstoss in VBA:
Code:
xCnt& = 0 // Zähler mit 0 vorbesetzen
xPnt& = InStr(text$, gesucht$) // sucht in 'text$' nach Inhalt von 'gesucht$' ab Anfang von 'text$' und liefert die ByteNr, wo die erste Übereinstimmung beginnt
Do While xPnt& // wiederholen bis nichts mehr gefunden wird
    xCnt& =xCnt& + 1 // Zähler inkrementieren
    xPnt& = InStr(xPnt& + len(gesucht$), text$, gesucht$) // sucht in 'text$' nach Inhalt von 'gesucht$' beginnend mit dem Byte, das auf die letzte Fundstelle folgt und liefert die ByteNr, wo die nächste Übereinstimmung beginnt
Loop
8ung: In VBA funktioniert diese Routine leider nicht, wenn 'gesucht$' einen LeerString enthält.
Um diesen Fall abzufangen die SchleifenBedingung erweitern zu:
Code:
Do While xPnt& > 0 And gesucht$ <> ""
 
Zuletzt bearbeitet:
Hallo,

vielleicht hilft das ja weiter

Code:
FUNCTION Fun_PatternCount : UDINT 
VAR_INPUT 
    s_In: STRING(255);        //String input  
    s_PSearch: STRING(20);    //Pattern to searche for     
END_VAR 
VAR 
    udi_InLength: UDINT;    //Length of input string 
    udi_PSLength: UDINT;    //Length of Pattern to searche for     
    udi_PToBegin: UDINT;    //Pointer to begin   
END_VAR 
 
IF NOT(s_In = '') THEN                                            //Input string is not empty 
    udi_InLength:= Length(sTR:= s_In);                            //Calc length of input string 
    udi_PSLength:= Length(sTR:= s_PSearch);                        //Calc length of search pattern 
    REPEAT     
        udi_PToBegin:= FindLeft(sBuffer:= s_In, sProbe:= s_PSearch, udiBegin:= udi_PToBegin);     //search pattern 
        IF udi_PToBegin > 0 THEN                                //Found pattern 
            Fun_PatternCount:= Fun_PatternCount + 1;            //Count 
             udi_PToBegin:=  udi_PToBegin + udi_PSLength;        //Add length of search pattern for next search  
        ELSE                                                    //Pattern not found 
            EXIT;                                                //Finish 
        END_IF 
    UNTIL (udi_InLength - udi_PToBegin) < udi_PSLength            //Until remaining string lenght < length of pattern 
    END_REPEAT;     
END_IF

Grüße

Peter
 
Zurück
Oben