Тема: Как из строки выделить только цифры?

Работаю в ABS, который позволяет для заполнения полей данных использовать конструкции VB.
Дано:
Есть некая электрическая панель, шкаф, щиток - она может именоваться ARK-1, ЩР-301, ЩО-2, ЩО2 и так далее по принципу - сколько-то букв и затем сколько-то цифр. К этим панелям присоединяются различные устройства - розетки, электродвигатели, и тд. Есть стремление в схемном обозначении этих самых различных устройств на месте самого первого знака использовать номер панели, к которой это устройство подключено, например, 1BTH2.3, 4M5, 6L7.8, где 1, 4 и 6 - номера панелей.
Вопрос:
Какая конструкция VB может выделить из текстовой строки имени панели только ЦИФРЫ, стоящие в ее конце, сколько бы их там не было?
Спасибо.

Re: Как из строки выделить только цифры?

Один из способов:
Проходишь по всей строке и сравнениваешь каждый элемента строки на вхождение в числовое множество [0...9].
Строковые функции в помощь:
Left(строка, кол-во симв.) - Левая часть строки
Right(строка, кол-во симв.) - Правая часть строки
Mid(строка,начало,кол-во симв.) - любая часть строки

Re: Как из строки выделить только цифры?

Да, забыл добавить по поводу множества:
Создай строку "0123456789", а затем каждый выделенный элемент твоей строки сравнивай функцией:
Instr(строка, подстрока) - ищет подстроку в строке
подстрока - это твой текущий символ
строка - это "0123456789"

Re: Как из строки выделить только цифры?

Sub test()
     'строка подлежащая обработке
     Dim strSource As String
     Dim strNumber As String
     strSource = "1BTH2.3"
     'оборачиваем строку
     strSource = StrReverse(strSource)
     'вычленяем число
     strNumber = CStr(Val(strSource))
     'оборачиваем строку снова
     strNumber = StrReverse(strNumber)
     MsgBox strNumber
End Sub

Обратите внимание на то, что функция Val признает в качестве разделителя целой и дробной части числа только точку.

Re: Как из строки выделить только цифры?

Отлично, товарищи!
Проектировщик по жизни, в программировании могу сбацать только четыре математических действия. Интуитивно какие-то алгоритмы крутились в моей голове, ну а после того, как прозвучали ИМЕНА ФУНКЦИЙ, надеюсь, смогу-таки докопаться до результата.
Еще раз спасибо за помощь.

Re: Как из строки выделить только цифры?

> Andi55
Проектировщику по жизни от проектировщика по этой же самой жизни - надеюсь, что особенно докапываться не придется, код работающий...

Re: Как из строки выделить только цифры?

Вы будете смеяться, но результат я получил, причем вот такой:
RESULT = Abs(StrReverse(StrReverse([PanelName])))
где RESULT = => это команда для Акада понимать выражение как VB
Преобразования:
ARK-123 => исходное значение [PanelName]
321- => после первой функции текст исчез, порядок сменился
-123 => после второй функции порядок того, чо осталось, восстановился со знаком минус
123 => после функции Abs, то что и хотелось
Красивый код? Знать бы еще почему он ТАК работает.
Функция Vol ни в каком виде здесь почему-то не понимается.

Re: Как из строки выделить только цифры?

Поправка
Функция Val ни в каком виде здесь почему-то не понимается.

Re: Как из строки выделить только цифры?

Может, поезд уже и ушел, но тем не менее (мало ли кому пригодится):

Function sGetNumbers(sValue As String) As String
Dim lSearch As Long     'Номер позиции
Dim lCounter As Long    'Счетчик цикла
  lSearch = 0
  For lCounter = 0 To 9
    If InStr(sValue, CStr(lCounter)) <> 0 Then
      If lSearch > InStr(sValue, CStr(lCounter)) Or lSearch = 0 Then
        lSearch = InStr(sValue, CStr(lCounter))
      End If  'lSearch > InStr(sValue, CStr(lCounter))
    End If  'lSearch > InStr(sValue, CStr(lCounter)) Or lSearch = 0
  Next lCounter
  sGetNumbers = Right(sValue, Len(sValue) - lSearch + 1)
End Function

Функция возвращает самую правую часть строки, начиная с первой цифры (0..9). Например, если в качестве параметра передать "Щ5098ЭК", функция вернет "5098ЭК". В принципе, можно и доработать до универсального варианта (который отсекает либо левую, либо правую, либо обе части), но это уже по вкусу.

Re: Как из строки выделить только цифры?

> Andi55
для такого варианта надо просто покопаться с номером элемента в строке. Позиционируется на "-". А что будет, если в качестве параметра передать "AbR1324"?

Re: Как из строки выделить только цифры?

> kpblc
На "AbR1324" получаем пустую строку, не ошибку, просто пусто.
Я начал глубже разбираться и обнаружил, что мне нужен не VB, а VBScript, кто бы знал.
Цитата из хелпа: "Formulas can be simple mathematical expressions, such as 2+2. They can also contain variables, operators, and functions allowed in VBScript, as shown in these examples." Далее перечень Statements and Functions.
Оказывается, я не на том языке программил...
Приношу всем свои извинения и попутно объявляю: для современных версий АДТ и АБС нужен не VB, а скрипты на VB. Это сильно осложняет ситуацию? Можно ли продолжать здесь обсуждать первоначальную тему?

Re: Как из строки выделить только цифры?

> Andi55
Странно, только что специально еще раз проверил, все нормально. Возвращается "1234". Вызывалось : MsgBox sGetNumbers("AbR1324")
имхо, конечно, но vbs под кад не совсем то - он больше для weba ориентирован, по-моему.

Re: Как из строки выделить только цифры?

Блин все просто
Dim j As Integer
Dim sStr As String
Dim sStr2 As String
sStr = "12D3L3 2"
Do Until j = Len(sStr)
    j = j + 1
    If Val(Mid(sStr, j, 1)) <> 0 And Mid(sStr, j, 1) <> "0" Then
        sStr2 = sStr2 & Mid(sStr, j, 1)
    End If
Loop
sStr2 - это полученый код