Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
228to232
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
228to232
228to232
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Prozentualer String-Vergleich

Prozentualer String-Vergleich
08.03.2003 21:15:00
Rainer
Hallo Excel-User,

Vorgaben:
1. In einer Userform-Textbox1 befindet sich ein langer String (ca. 5000 Zeichen).

2. In Textbox2 gebe ich einen String vor, der in Textbox1 gesucht werden soll.

3. In Textbox3 wird die prozentuale Genauigkeit (1 bis 100 %) angegeben, mit wie viel Prozent der Suchstring übereinstimmen soll.

4. Die gefundenen Übereinstimmungen sollten in einem UF-Listenfeld eingetragen werden.

Bei 100 % Übereinstimmung gibt es kein Problem.

Jedoch bei Übereinstimmung kleiner 100 % sehe ich im Moment keinen Lösungsansatz.

Bin für jede Hilfe und Idee dankbar.

Rainer

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Prozentualer String-Vergleich
08.03.2003 21:55:20
Ramses

Hallo Rainer,

das ganze als erste Variante ;-).
Es kann sicher noch ausgefeilt werden, dass nur ganze Wörter angezeigt werden, d.h. kürzer oder länger, bis zum ganzen Wort einfach ;-).
Aber als Ansatz sollte das mal dienen:

und reduziert

Der dazu passende Code,... Beispieltabelle kann ich dir bei Bedarf senden:


Private Sub btnStringSearch_Click()
'(C) Ramses
Dim strOrig As String, strSearch As String
Dim strVal As Double, strLen As Integer, strGoal As Double
Dim i As Integer, j As Integer, n As Integer ' für die weitere Verfeinerung :-)
'Variablen füllen
'Der zu durchsuchende String
strOrig = Me.TextBox3
'Der zu suchende String
strSearch = Me.TextBox1
strLen = Len(Me.TextBox1)
'Werte ermitteln
'Der prozentuale Wert
'Wert prüfen
If CDbl(Me.TextBox2.Value) > 100 Or CDbl(Me.TextBox2.Value) < 50 Then
    MsgBox ("Diese Wertangaben ergeben keinen Sinn")
    Exit Sub
End If
'Eingabe in Zahlenwert umwandeln
strVal = CDbl(Me.TextBox2)
'Gewünschte Übereinstimmungslänge ermitteln
strGoal = Int((Len(strSearch) / 100) * strVal)
'Suche starten
For i = 1 To Len(strOrig)
    If Mid(strOrig, i, strGoal) = Left(strSearch, strGoal) Then
        Me.ListBox1.AddItem Mid(strOrig, i, Len(strSearch))
    End If
Next i
End Sub 
     Code eingefügt mit Syntaxhighlighter 1.16

Gruss Rainer



Anzeige
Re: Prozentualer String-Vergleich
08.03.2003 22:00:48
gordon

Hi Rainer,

gibt es vielleicht noch ein wenig Hintergrund bzgl. Sinn dieser Aufgabenstellung ?

Wer die prozentuale Vorgabe geben will sollte doch auch eine Vorstellung haben, was diese eigentlich aussagen soll.

Gruß
gordon



Korrektes finden kleinerer und grösserer Wörter...
08.03.2003 22:51:33
Ramses

Hallo,

hier das Finetuning :-))

und der zugehörige Code:


Private Sub btnStringSearch_Click()
'(C) Ramses
Dim strOrig As String, strSearch As String
Dim strVal As Double, strLen As Integer, strGoal As Double
Dim i As Integer, j As Integer, n As Integer, findOne As Boolean ' für die weitere Verfeinerung :-)
'Listbox leeren
Me.ListBox1.Clear
'Variablen füllen
'Der zu durchsuchende String
strOrig = Me.TextBox3
'Der zu suchende String
strSearch = Me.TextBox1
strLen = Len(Me.TextBox1)
findOne = False
'Werte ermitteln
'Der prozentuale Wert
'Wert prüfen
If CDbl(Me.TextBox2.Value) > 100 Or CDbl(Me.TextBox2.Value) < 50 Then
    MsgBox ("Diese Wertangaben ergeben keinen Sinn")
    Exit Sub
End If
'Eingabe in Zahlenwert umwandeln
strVal = CDbl(Me.TextBox2)
'Gewünschte Übereinstimmungslänge ermitteln
strGoal = Int((Len(strSearch) / 100) * strVal)
'maximale Wortlänge für nicht exakt übereinstimende Wörter
n = 50
'Suche starten
For i = 1 To Len(strOrig)
    If Mid(strOrig, i, strGoal) = Left(strSearch, strGoal) Then
        If strVal = 100 Then
            'Bei 100% erfolgt der Eintrag direkt
            Me.ListBox1.AddItem Mid(strOrig, i, Len(strSearch))
            findOne = True
        End If
        If strVal < 100 Then
            'bei reduzierter Genauigkeit wird versucht zuerst die Auswalh
            'zu verkleinern um Leerzeichen zu finden damit ein ganzes
            'Wort identifiziert werden kann
            Debug.Print "gefundener minimalstring " & Mid(strOrig, i, strGoal)
            For j = Len(Mid(strOrig, i, strGoal)) To 1 Step -1
                If Mid(Mid(strOrig, i, strGoal), j, 1) = " " Then
                    Me.ListBox1.AddItem Left(Mid(strOrig, i, Len(strSearch)), Len(Mid(strOrig, i, strGoal)) - j)
                    findOne = True
                    Exit For
                End If
            Next j
        End If
        If findOne = False Then
            'Wenn kein abschliessendes Wort gefunden werden kann
            'wird die Suche bis auf n vergrössert um das nächste
            'zutreffende Wort zu finden
            For j = i To (i + 50)
                If Mid(strOrig, j, 1) = " " Then
                    Me.ListBox1.AddItem Mid(strOrig, i, j - i)
                    Exit For
                End If
            Next j
        End If
    'finden zurücksetzen
    findOne = False
    End If
Next i
End Sub
 
     Code eingefügt mit Syntaxhighlighter 1.16

Gruss Rainer


Anzeige
Re: Korrektes finden kleinerer und grösserer Wörter...
09.03.2003 15:18:35
gordon

Hallo Rainers ;-)

Ramses - Klasse Lösungsansätze, hatte mir aber schon bei meiner Frage gedacht, dass es auf die Variante 'finde mal irgendwas, was irgendwie ungefähr übereinstimmt' hinauslaufen könnte.

Vielleicht noch als Tip für Rainer: Ganz so allgemein ist es bei der Einschränkung 'Der gefundene „übereinstimmende“ String soll die gleiche Länge wie der Suchstring haben' vielleicht doch nicht - Den Inhalt der Textbox an den leerzeichen getrennt in ein Array einlesen, in zweites Array die Längen der einzelnen Elemente, dieses mit Quicksort sortieren und nur die fraglichen Längen bearbeiten. Hier Zeichenweise vergleichen. Sollte sich noch mit vertretbarem Rechenaufwand abwickeln lassen.

Gruß
gordon

Anzeige
Re: Korrektes finden kleinerer und grösserer Wörter...
09.03.2003 15:41:41
Ramses

Hallo Gordon,

... eigentlich so wie immer :-)
Aber das hatte einen gewissen Reiz und die Idee hat mich inspiriert.
Ich hatte das Problem mal bei einer Support-Datenbank wo immer Text eingegeben wurde,... aber dann nie mehr was gefunden wurde weil alles Formularbasiert war.
Nach einem kleinen TuneUp dieser Variante habe ich nun das was ich brauche :-))
Das ist der angenehmen Nebeneffekt :-))

Alle Datensätze aus Spalte X werden in die Listbox eingelesen und ein kurzer String mit 90% definiert

Das Ergebnis sind zwei Fundstellen, wo ich allerdings noch nicht weiss was dahinter ist.

Wie du bemerkt hast, ist die Suche Case-Sensitiv :-)

Nun kann ich selektieren und den jweiligen Datensatz ansehen :-)

Wenn du die Tabelle haben willst, kannst du mir ja ein Mail senden.

Gruss Rainer


Anzeige
Off Topic
10.03.2003 14:13:53
gordon

Hallo Rainer,

vielen Dank für's Angebot,werde bei Bedarf darauf zurückkommen. Zugegeben, die Frage an sich war wirklich eine der besseren...

Generell Hut ab vor Deinem (und auch der anderen sehr engagierten Helfer/innen) Enthusiasmus.

Gruß
gordon


Re: Korrektes finden kleinerer und grösserer Wörter...
11.03.2003 13:37:34
Rainer Quaas

Hallo Programmier-Rainer,

nochmals danke.

Ich bin immer noch am Austüfteln Deines gesendeten Codes, hat mich sehr inspiriert.

Eine nicht funktionierende Teillösung für mein Problem habe ich schon. Da ich nicht immer sofort weiterprogrammieren kann, werde ich mich später, hoffentlich mit Erfolg, melden.

Gruß Rainer aus Berlin


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige