#vbscript #split
#vbscript #разделение
Вопрос:
У меня есть фрагмент кода, который успешно извлекает определенную строку с помощью Split. Я хочу получить другую строку, и я не получаю правильный вывод.
Это данные, из которых я пытаюсь извлечь строку.
N126 (Всего: 476,00 дюймов, 119,0 sq.in , 1 cu.in , 0,003 фунта)
В настоящее время я могу извлечь 1 между sq.in , и cu.in , используя эту строку кода.
volume = Split(Split(srtContents, "sq.in,")(1), "cu.in,")(0)
Вместо 1 я хотел бы получить 119.0, но я всегда получаю 119.0 sq.
Я знаю, почему я это получаю, я просто не знаю, как это исправить. Это мой код:
area = Split(Split(srtContents, "in,")(1), "sq.in,")(0)
Комментарии:
1. Что именно вы хотите сделать с этими данными. Я бы предположил, что разделение на пробел и проверка на число дадут вам числа. Строка, находящаяся на 1 месте над каждым числом, будет его меткой.
2.
Split(srtContents,"in,")(1)
не содержит"sq.in,"
строку… Вместо этого используйте, например,Split(srtContents," in,")(1)
(обратите внимание на пробел).3. Я пытаюсь вычислить общий вес композитного материала, используемого для изготовления определенной детали. Я пытаюсь использовать квадратные дюймы для вычисления объема x плотности. Их может быть до 150
4. отделите файлы данных управления машиной, откуда взята эта строка, для создания определенной части. У меня есть скрипт, который предположительно открывает каждый файл, вычисляет вес, затем суммирует их все, чтобы получить общий вес. Спасибо за вашу помощь.
Ответ №1:
Одним из способов сделать это было бы разбиение входной строки на запятые, за которыми следует пробел:
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))
.