Clever-Excel-Forum

Normale Version: Alle Fundstellen mit Wildcards in einem String mittels eines Strings ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Code:
Sub M_snb()
    sp = split("Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer.")
    c01 = "s*r"
    
    For j = 0 To UBound(sp)
       If Left(sp(j), 1) & Right(sp(j), 1) = Replace(c01, "*", "") Then c02 = c02 & vbLf & y & vbTab & sp(j)
       y = y + Len(sp(j)) + 1
    Next
    
    MsgBox c02
End Sub
Hallo Leute,

habe mal den Code von Atilla und SNB ausprobiert und festgestellt, dass die Wildcardsuche nur wortweise funktioniert. Wortübergreifend versagt die Suche.
Mit diesem von mir eingebautem "Patch" ist der Atilla-Code auch wortübergreifend einsetzbar:


Code:
Function Wildcard(strString, strSuch)
Dim iPos As Long, intA As Integer
strString = Replace(strString, " ", "#")

Do While IsNumeric(Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")"))
iPos = Evaluate("=SEARCH(" & """" & strSuch & """" & "," & """" & strString & """" & "," & iPos + 1 & ")") + 1
For intA = iPos - 1 To Len(strString)
  If (Mid(strString, iPos - 1, intA - iPos + 1)) Like [strSuch] And UBound(Split((Mid(strString, iPos - 1, intA - iPos + 1)))) = 0 Then
    strErgebnis = strErgebnis & iPos - 1 & " " & Mid(strString, iPos - 1, intA - iPos + 1) & " ,"
    Exit For
  End If
Next
Loop

If Len(strErgebnis) Then
strErgebnis = Replace(strErgebnis, "#", " ")
Debug.Print "Fundstellen: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)
End If

End Function

Sub Wildcard_Suche()
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuche = "for*r"
Call Wildcard(strString, strSuche)

End Sub
Eine Wildcard-Suche nach "for*r" ergibt jetzt auch folgerichtig wortübergreifend: "foristisches Abenteuer".
Leider geht das Ganze nur bei Atillas Code, der Snb-Code ist zu formelspezifisch.

Grüße
Julia
Code:
Sub M_snb()
    c00 = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
    sn = Split("for*r", "*")
    
    sp = Split(c00, sn(0))
    For j = 1 To UBound(sp)
       c01 = c01 & vbLf & sn(0) & Split(sp(j), sn(1))(0) & sn(1)
    Next
    
    MsgBox c01
End Sub
Hi,

(01.03.2016, 12:50)snb schrieb: [ -> ]@Schülerin

Mir fällt auf dass du nur Fragen stellst und selbst keine Beiträge leistest.

ich gehe davon aus, daß Schülerin und juliatoll zwei Accounts derselben Person sind (u.a. bauen Beiträge inhaltlich aufeinander auf, eine führt thematisch Beitrag der anderen fort).
Hallo Snb,

ich verstehe deine beiden Lösungen nicht. Schaut man sich deinen ersten Code an, suchst du einfach nur nach Anfangs- und Endbuchstaben der durch Leerzeichen getrennten Wörter in einem String.
Gebe ich als Suchstring  "o*u" ein erhalte ich folglich als Ausgabe bei dem angegebenemTeststring keine Werte.

Und die zweite Lösung:
c00 = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer." 'Teststring
sn = Split("as*ue", "*")  'Suchstring

Die Ausgabe liefert dann:
as Clever-Excel Forum gibt viele ultrue
asuper Tipps. Es ist ein super Forum! Ein foristisches Abenteu

Der Code ist damit eigentlich unbrauchbar, bzw. liefert den für die Wildcardsuche interessierten Lesern dieses Threads in diesem Forum nicht die Hilfestellung wonach sie suchen.
Hallo Julia,

es kommt immer auf die Anforderungen an.

Wenn Du bei mir diesen teil;


Code:
And UBound(Split((Mid(strString, iPos - 1, intA - iPos + 1)))) = 0
 löschst,

erhalte ich das gleiche Ergebnis, wie Du.

So hatte ich das vorher.
Auf Grund der Zwischenfrage von Nora, habe ich den Code dann erweitert.
Weil Nora wieder andere Anforderungen gestellt hat.

Im übrigen kann der oben Eingestellte Codeteil auch bei Dir entfallen.
Hallöchen,

als Zwischenergebenis stelle ich hier mal eine sehr einfach zu verstehende Codealternative ins Netz. Der Code funktioniert sowohl für einzelne Wörter als auch wortübergreifend.
Was ich allerdings bisher noch vermisse in diesem Thread ist der Königsweg bei der Wildcard-Suche. Die Suche mit regulären Ausdrücken, die bei richtiger Verwendung diese vielen Codezeilen von mir überflüssig machen dürfte.


Code:
Sub String_in_String_mit_Wildcards()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer, intB As Integer
strString = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
strSuch = "as*ue"

intA = 1
While intA < Len(strString)
If InStr(intA, strString, Split(strSuch, "*")(0)) Then
intB = InStr(intA, strString, Split(strSuch, "*")(0))
If InStr(intB, strString, Split(strSuch, "*")(1)) Then
intA = InStr(intB, strString, Split(strSuch, "*")(1)) + Len(Split(strSuch, "*")(0))
strErgebnis = strErgebnis & intB & " " & Mid(strString, intB, intA - intB) & ","
End If
End If
intA = intA + 1
Wend

Debug.Print "Ausgabe: " & Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub
Code:
Sub M_snb()
    c00 = "Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."
    sn = Split("as*ue", "*")
    
    MsgBox Split(Mid(c00, InStr(c00, sn(0))), sn(1))(0) & sn(1)
End Sub
Aber:

"Das Clever-Excel Forum gibt viele ultrasuper Tipps. Es ist ein super Forum! Ein foristisches Abenteuer."

enthält nur eine 'richtige' string dem "as*ue" entspricht:


asuper Tipps. Es ist ein super Forum! Ein foristisches Abenteue
Seiten: 1 2