Hi All
Ich starte hiermit mal den µit - Juli und hoffe, daß die Aufgabenstellung interessant ist und weiters, daß diese Funktion nicht schon existiert
Aufgabe:
Schreibe eine Funktion, welche zählt, wie oft ein Substring in einem String vorkommt!
_StringInStrCount( "String", "SubString" [, $bSens=False [, $bPartial=False [, $sDelimiter='' [, $bRetType=False]]]])
String = String in dem gesucht werden soll
SubString = String nach dem gesucht werden soll
$bSens = Casesensitive True/False
(Sollte klar sein)
$bPartial = Wenn True, dann werden nur die alleinstehenden SubStrings gezählt
( True: "Test Testosteron" ; False: "Test Testosteron")
$sDelimiter = Wenn nicht '' , dann soll der SubString bei diesem Zeichen gesplittet werden und nach allen Teilen gesucht werden.
(SubString='Test Muster':
$sDelimiter='' : 'Test Muster Das ist ein Muster und ein Test'
$sDelimiter=' ' : 'Test Muster Das ist ein Muster und ein Test' (SubString wird in diesem Fall beim Leerzeichen getrennt und nach allen Teilen einzeln gesucht)
$bRetType = False: Gesammtanzahl wird zurückgegeben; True: ein Array mit den Einzelcounts wird zurückgegeben
($aReturn[0] = Anzahl der Einträge, $aReturn[1] = Anzahl des 1 TeilSubStrings ...)
Wenn SubString leer ist, dann werden alle Zeichen gezählt, mit Ausnahme des Delimiters (Flag3)
z.B.: SubString='' Flag3=';' => '1234;5678' = 8 Zeichen
In diesem Fall soll auch bei Array-Rückgabe die Gesammtsumme verwendet werden $aReturn[1]=8
Ich hoffe die Angaben sind verständlich!
Bewertet werden Geschwindigkeit und Größe.
Teilnehmer senden bitte Ihre Funktion an mich per PM.
lgE
EDIT:
_StringInStrCount($sString, $sSearch='', $bSens=False, $bPartial=False, $sDelim='', $bReturn=False)
$sStringzu durchsuchender String
$sSearchSuchbegriff(e)
$bSensTrue = Case Sensitiv / False = nicht Case Sensitiv
$bPartialTrue = Suchbegriff auch als Teilstring / False = Suchbegriff alleinstehend
$sDelimTrenner bei mehreren Suchbegriffen
$bReturnTrue = Rückgabe Array / False = Rückgabe String
Bedingungen:
$sSearch = Leerstring UND $sDelim = Leerstring ==> Rückgabe Anzahl ALLER Zeichen
$sSearch = Leerstring UND $sDelim = String ==> Rückgabe Anzahl ALLER Zeichen OHNE $sDelim
$bReturn = True==> [0]=Anzahl Ergebnisse, [1]..[n]=Anzahl Begriff 1..n
$bReturn = False==> String Anzahl Summe ALLER Begriffe
Alles anzeigen
TestSuite:
Spoiler anzeigen
$sText = "Und Bund rund Undelete und Fundbüro; Und. und! und? und'" & ' und" ' & "Und" & @LF & "Rund" & @CR & "Rund" & @CRLF & "Rund;" & @CRLF & "Aber Aberglaube labern makaber aber"
; -Send -Part +Send -Part +Sens +Part -Sens +Part
;und 8 5 11 15
;aber 2 1 3 5
_Check(1, _StringInStrCount($sText, "und", False, False, "", False),
_Check(2, _StringInStrCount($sText, "und", True, False, "", False), 5)
_Check(3, _StringInStrCount($sText, "und", True, True, "", False), 11)
_Check(4, _StringInStrCount($sText, "und", False, True, "", False), 15)
_Check(5, _StringInStrCount($sText, "aber", False, False, "", False), 2)
_Check(6, _StringInStrCount($sText, "aber", True, False, "", False), 1)
_Check(7, _StringInStrCount($sText, "aber", True, True, "", False), 3)
_Check(8, _StringInStrCount($sText, "aber", False, True, "", False), 5)
_Check(9, _StringInStrCount($sText, "und;aber", False, False, ";", False), 10)
_Check(10, _StringInStrCount($sText, "und;aber", True, False, ";", False), 6)
_Check(11, _StringInStrCount($sText, "und;aber", True, True, ";", False), 14)
_Check(12, _StringInStrCount($sText, "und;aber", False, True, ";", False), 20)
_Check(13, _StringInStrCount($sText, "und;aber", False, False, ";", True), "2;8;2")
_Check(14, _StringInStrCount($sText, "und;aber", True, False, ";", True), "2;5;1")
_Check(15, _StringInStrCount($sText, "und;aber", True, True, ";", True), "2;11;3")
_Check(16, _StringInStrCount($sText, "und;aber", False, True, ";", True), "2;15;5")
_Check(17, _StringInStrCount($sText, "", False, True, "", False), 119)
_Check(17, _StringInStrCount($sText, "", False, True, " ", False), 104)
Func _StringInStrCount($sString, $sSubString, $bSens = False, $bPartial = False, $sDelimiter = '', $bRetType = False)
EndFunc ;==>_StringInStrCount
Func _Check($i, $j, $k)
Local $sj = "", $sk = ""
ConsoleWrite("Test " & $i & ": ")
Switch StringInStr($k, ";")
Case False
If $j = $k Then
ConsoleWrite(" Richtig: " & @TAB & $j & @LF)
Else
ConsoleWrite(" Falsch: " & @TAB & $j & @TAB & " (richtig wäre: " & $k & ")" & @LF)
EndIf
Case Else
$k = StringSplit($k, ";", 2)
If Not IsArray($j) Then
ConsoleWrite(" Falsch: " & @TAB & " Rückgabe ist kein Array" & @LF)
Return
EndIf
If UBound($j) <> UBound($k) Then
For $l = 0 To UBound($j) - 1
$sj &= " " & $j[$l]
Next
For $l = 0 To UBound($k) - 1
$sk &= " " & $k[$l]
Next
ConsoleWrite(" Falsch: " & @TAB & $sj & @TAB & " (richtig wäre: " & $sk & ")" & @LF)
Return
EndIf
Local $bRichtig = True
For $l = 0 To UBound($j) - 1
If $j[$l] <> $k[$l] Then $bRichtig = False
$sj &= " " & $j[$l]
$sk &= " " & $k[$l]
Next
If $bRichtig Then
ConsoleWrite(" Richtig: " & @TAB & $sk & @LF)
Else
ConsoleWrite(" Falsch: " & @TAB & $sj & @TAB & " (richtig wäre: " & $sk & ")" & @LF)
EndIf
EndSwitch
EndFunc ;==>_Check