У меня проблемы с извлечением определенной строки с VBS - PullRequest
1 голос
/ 02 апреля 2019

У меня есть фрагмент кода, который успешно извлекает определенную строку, используя Split. Я хочу получить другую строку и не получаю правильный вывод.

Это данные, из которых я пытаюсь извлечь строку.

N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)

В настоящее время я могу извлечь 1 между sq.in и cu.in, используя эту строку кода.

volume = Split(Split(srtContents, "sq.in,")(1), "cu.in,")(0)

Вместо 1 я хотел бы получить 119,0, но я всегда получаю 119,0 кв.

Я знаю, почему у меня это получается, я просто не знаю, как это исправить. Это мой код:

area = Split(Split(srtContents, "in,")(1), "sq.in,")(0)

1 Ответ

0 голосов
/ 03 апреля 2019

Один из способов это сделать - разделить входную строку запятыми, а затем пробел:

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"
a1 = Split(s, ", ")

затем разделите интересующее вас поле на пробелы:

a2 = Split(a1(1), " ")
v = a2(0)

Более элегантный подход, особенно когда вы хотите извлечь несколько значений из строки, - это совпадение с регулярным выражением.

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"

Set re = New RegExp
re.Pattern = "(\d+\.\d+) in, (\d+\.\d+) sq\.in, (\d+) cu\.in, (\.\d+) lb"

For Each m In re.Execute(s)
    total  = m.Submatches(0)
    area   = m.Submatches(1)
    volume = m.Submatches(2)
    weight = m.Submatches(3)
Next

WScript.Echo area

Или, если вы хотите использовать более общий подход:

s = "N126(Total: 476.00 in, 119.0 sq.in, 1 cu.in, .003 lb)"

Set re = New RegExp
re.Pattern = " ((?:\d*\.)?\d+) "
re.Global  = True

For Each m In re.Execute(s)
    WScript.Echo m.Submatches(0)
Next

Помните, что в любом случае извлеченные значения остаются строками. Если они нужны вам как числовые значения, вам нужно преобразовать их после извлечения, например, weight CDbl(m.Submatches(3)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...