Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Вычислить подсторку


Автор: Тиль 22.5.2008, 15:19
есть строка "ггг-05" и "ггг 05".Факт в том что после ггг может стоять или пробел или дефис. Как можно средствами VBA выделить "ггг"

Автор: mihanik 22.5.2008, 16:15
Начнем с того, "ггг" - это реальные "ггг" или под этими "ггг" скрывается нечто другое?
"ггг" бывают разные...

Если это реальные "ггг", то это подстрока длиной 3 символа из начала строки
Код

Выделяется так
mid("ггг-впыомыамы",1,3)


Если же это гипотетические "ггг", то тут надо хитрее...

Код

'********************************************************************
'*
'* Функция  : strExtractString
'* Описание : Выделяет из строки подстроку, удовлетворяющую шаблону
'* Вход     : strString - строка
'*            strPath   - шаблон
'* Выход    : строка соответствущая шаблону
'*
'********************************************************************
Private Function strExtractString(ByVal strString, ByVal strPath)
Dim RegEx         ' Экземпляр регулярного выражения
Dim colMatches   ' Коллекция совпадений
Dim aMatch       ' один из совпавших образцов

' Создаём экземпляр объекта RegExp
    Set RegEx = CreateObject("VBScript.RegExp")

' Настраиваем режимы работы регулярного выражения
    RegEx.IgnoreCase = True ' Осуществляем поиск игнорируя размер букв
    RegEx.Global = False    ' Ищем до первого совпадения
    RegEx.MultiLine = False ' Текст не является многострочным
    RegEx.Pattern = strPath ' Устанавливаем шаблон регулярного выражения
  
' Тестируем строку на соответствие шаблону
    Set colMatches = RegEx.Execute(strString)
    For Each aMatch In colMatches
        strExtractString = aMatch.Value
        Exit For
    Next

' Уничтожаем экземпляры объектов
    Set colMatches = Nothing
    Set RegEx = Nothing

End Function



И тут в качестве шаблона надо использовать регулярное выражение, которое полностью описывает выделяемую строку.

Разберёшься?

Автор: Тиль 22.5.2008, 16:21
неа......под "ГГГ" может быть строка любой длинны, самое гланое отсечь все что стоит начиная с пробела или с тире

Автор: mihanik 22.5.2008, 16:33
Цитата(Тиль @  22.5.2008,  16:21 Найти цитируемый пост)
самое гланое отсечь все что стоит начиная с пробела или с тире

А до чего?

Ну...
Например так

Код

        Resultat = strExtractString("ггг-05", "[ -]*.*$")


Ты точнее можешь сказать?

Добавлено через 55 секунд
ЗЫ.

"[ -]*.*$" - это регулярное выражение. В Инете полно про это.



Автор: ama_kid 22.5.2008, 16:35
Тиль, как вариант:
Код
 Dim AStrings(10) As String
 AString = Split("ГГГ-05", "-", , vbTextCompare)

Автор: Тиль 22.5.2008, 16:45
дело в том что по строкам будет идти цикл и я не знаю что будет стоять после "ггг", пробел или тире, потому что будет и так и так по любому

Автор: mihanik 22.5.2008, 16:54
Тиль, повторяю!!!!
Код

Resultat = strExtractString("ггг-05", "[ -]*.*$")

тут и пробел, и тире, и, если надо, какава с чаем...

Автор: ama_kid 22.5.2008, 16:54
Цитата(Тиль @  22.5.2008,  16:45 Найти цитируемый пост)
дело в том что по строкам будет идти цикл и я не знаю что будет стоять после "ггг", пробел или тире, потому что будет и так и так по любому 
Перед вызовом Split вызываешь Replace для замены всех пробелов на тире. Далее по тексту...

Автор: Akina 22.5.2008, 16:55
Код

strString = replace(strString, "-", " ")
strString= left(strString, instr(strString, " "))

Код

arrString = split(strString, "-")
arrString = split(arrString(0), " ")
strString = arrString(0)
Вариантов миллион...

Автор: Тиль 22.5.2008, 17:13
все..нормально, разобрался.....пасибки огромные всем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)