|
|
|
| Есть дурацкий прайс поставщика, где нет нормального наименования товара.
Приходится сращивать из нескольких столбцов, в которых указано назначение товара, производитель, партнамбер, дескрипшен.
Всё бы хорошо, но есть же бестолковые манагеры, которые могут продублировать например в парнамбере и дескрипшене собственно модель устройства, или производителя, или.... В результате можно получить например что то подобное:
"Компонент майкрософт офис, майкрософт аксесс, приложение аксесс"
С ходу приходит в голову только разобрать строку на запчасти, и посчитать количество вхождений. Затем удалить каждое повторное точное вхождение для тех слов, количество которых превышает 1 (словоформы например не учитываем).
В итоге должно получиться:
"Компонент майкрософт офис, аксесс, приложение"
Что меня вполне устроит.
Но на таблице в несколько десятков тысяч строк это будет тяжковато как мне кажется.
Возможно кто то решал уже подобную задачу? Или с ходу родилась идея?
Заранее благодарен :-) | |
|
| |
|
|
|
|
Public Function GetOnly(ByVal strInput As String) As String
Dim dic As New Scripting.Dictionary
Dim i As Integer
Dim Words As Variant
strInput = Replace(strInput, ",", "")
Words = Split(strInput, " ")
For i = 0 To UBound(Words)
If Not dic.Exists(Words(i)) Then dic.Add Words(i), Words(i)
Next i
GetOnly = Join(dic.Items)
End Function
?GetOnly("Компонент майкрософт офис, майкрософт аксесс, приложение аксесс")
Компонент майкрософт офис аксесс приложение
|
| |
|
| |
|
|
|
| Как минимум пару новых приёмов для себя открыл :-)
Как бы ещё знаки препинания сохранить? Их может быть много разных :;/\(){}[] и т.д.
В любом случае Спасибо :-), есть от чего оттолкнуться | |
|
| |