Hi.
Was du suchst ist in etwa folgendes:
Option Explicit
Public Sub Test()
Dim vntExpr As Variant
Dim vntTokenList, vntToken, vntItem
'einfach mal drei Beispiele
vntExpr = Array("Apfel100gelb", "Äpfel98ge lb", "Ap-fel1.00Farbegelb")
For Each vntItem In vntExpr
'mittels /ExtractTokens/ Inhalt in Wörter und Zahlen zerlegen (alle anderen Zeichen werden ignoriert)
Debug.Print ">> Expression '"; CStr(vntItem); "' contains ["; CStr(ExtractTokens(vntItem, vntTokenList)); "] tokens <<"
For Each vntToken In vntTokenList
Debug.Print Spc(2); ">> '"; vntToken & "'"
Next
Next
End Sub
Public Function ExtractTokens(ByVal Expression As Variant, ByRef TokenList As Variant) As Long
Dim c As String * 1
Dim t, b, i&
b = Array(False, False, False)
For i = 1 To Len(Expression)
c = Mid$(Expression, i, 1)
Select Case LCase$(c)
Case "a" To "z", "ä", "ö", "ü", "ß"
b = Array(b(LBound(b) + 1), True, True)
Case "0" To "9"
b = Array(b(LBound(b) + 1), False, True)
Case Else
b(LBound(b) + 2) = False
End Select
If (i > 1) And (b(LBound(b) + 0) Xor b(LBound(b) + 1)) And b(LBound(b) + 2) Then t = t & vbNullChar
If b(LBound(b) + 2) Then t = t & c
Next
TokenList = Split(t, vbNullChar)
ExtractTokens = UBound(TokenList) - LBound(TokenList) + 1
End Function
Die Ausgabe sieht so aus:
>> Expression 'Apfel100gelb' contains [3] tokens <<
>> 'Apfel'
>> '100'
>> 'gelb'
>> Expression 'Äpfel98ge lb' contains [3] tokens <<
>> 'Äpfel'
>> '98'
>> 'gelb'
>> Expression 'Ap-fel1.00Farbegelb' contains [3] tokens <<
>> 'Apfel'
>> '100'
>> 'Farbegelb'
Im hervorgehobenen Teil werden die einzelnen Wörter und Zahlen zur Anschauung ausgegeben.
Hier würde man dann ansetzen, um die "Harmonisierung" vorzunehmen. Das wäre wohl am einfachsten, indem man in Excel eine Liste der Möglichkeiten erstellt, wobei das erste Wort in der Liste gleichzeitig die harmonisierte Version davon darstellt. Man geht dann einfach die Liste durch und schaut ob das Wort darin enthalten ist, wenn ja: schaut man ob es das erste in der entspr. Liste ist, wenn nicht: nimmt man das erste aus dieser Liste und ersetzt das Wort damit.
Grüße
|