Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Разбор текстовой строки / 6 сообщений из 6, страница 1 из 1
17.09.2014, 12:01
    #38748954
textstring
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
Есть большой перечень инвентарных номеров вида число+символ/буква+число - например, 423-2333, 45668/14, 45F477851 (в качестве символ/буква пока такие варианты "-", "/", "F")
Эти номера нужно обработать с целью получения из каждого - два числа, без разделителя (напр. как два элемента массива).
Подскажите, как оптимальнее проводить такую обработку в VBA
...
Рейтинг: 0 / 0
17.09.2014, 12:27
    #38748980
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
2 replace + split
...
Рейтинг: 0 / 0
17.09.2014, 17:38
    #38749500
textstring
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
Cо Split понятно, а что подразумевается под "2 replace"?
...
Рейтинг: 0 / 0
17.09.2014, 17:43
    #38749506
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
Выбрать один (любой) разделитель. Двумя replace заменить другие два на выбранный. Потом split по выбранному.
...
Рейтинг: 0 / 0
17.09.2014, 19:01
    #38749595
textstring
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
Т.к. в дальнейшем возможны и другие разделители, пока такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub Separator()
    Dim separat As Variant
    Dim cc As Variant
    Dim k() As String
    For Each cc In Selection
        For Each separat In Array("-", "/", "F") ' на будущее
            cc = Replace(cc, separat, "@")
        Next
        k = Split(cc, "@")
    Debug.Print k(0) & vbTab & k(1) ' для отладки
    Next
End Sub


Или получше можно сделать?
...
Рейтинг: 0 / 0
18.09.2014, 02:02
    #38749883
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбор текстовой строки
textstringИли получше можноНу, можно воспользоваться regexp. Вроде такого:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Separator2()
    Dim cc As Variant
    Dim r As Object, m As Object
    Set r = CreateObject("vbscript.regexp")
    With r
        .Global = False: .IgnoreCase = True: .MultiLine = False: .Pattern = "(\d+)([-\/F]+)(\d+)"
    End With
    For Each cc In Selection
        Set m = r.Execute(cc)
        If m.Count Then
            Debug.Print m(0).Submatches(0) & vbTab & m(0).Submatches(2) ' для отладки
        End If
    Next
End Sub


Только надо все равно проверять, какой подход быстрее...
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Разбор текстовой строки / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]