ник: Анатолий (Киев)
Олег, я думаю, что это надо делать с помощью Recordset-ов. Типа так:
Do Until rsTabl1.EOF
s = rsTabl1![Алиас]: t = rsTabl1![Тип]
rsTabl2.FindFirst "[Тип]=" & t
Do Until rsTabl2.NoMatch
s = Replace(s, rsTabl2![Старое значение], NZ(rsTabl2![Новое значение], " "))
rsTabl2.FindNext "[Тип]=" & t
Loop
s = InsertSpaceBetweenGroupSimbols(s)
If rsTabl1![Алиас] <> s Then
rsTabl1.Edit
rsTabl1![Алиас] = s
rsTabl1.Update
End If
rsTabl1.MoveNext
Loop
|
Каждая запись будет обрабатываться только 1 раз, причем обновление будет только там, где текст изменился.
Если применить ADODB.Recordset с UpdateBatch или транзакции, то процесс можно значительно ускорить.
Функцию InsertSpaceBetweenGroupSimbols я представляю так:
Проход по строке с предпоследнего по первый символ, анализ текущего и следующего символа с помощью Like и вставка пробела в строку при необходимости.
ДОБАВЛЕНО. А вот и функция:
Function InsertSpaceBetweenGroupSimbols(ByVal s$) As String
Dim i, s1 As String * 1, s2 As String * 1
For i = Len(s) - 1 To 1 Step -1
s1 = Mid$(s, i, 1): s2 = Mid$(s, i + 1, 1)
If s1 = " " Or s2 = " " Then
ElseIf s1 Like "[A-ÿ]" Then
If s2 Like "[!A-ÿ]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
ElseIf s1 Like "[0-9]" Then
If s2 Like "[!0-9]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
ElseIf s1 Like "[!A-ÿ0-9]" Then
If s2 Like "[A-ÿ0-9]" Then s = Left$(s, i) & " " & Mid$(s, i + 1)
End If
Next
InsertSpaceBetweenGroupSimbols = s
End Function
|