Split
в сочетании с Filter
позволяет использовать только один l oop
Просто для удовольствия и в дополнение к правильному ответу @FaneDuru, я демонстрирую, как использовать Функция Split()
объединена с Filter()
, что позволяет избежать дополнительной передачи элементов массива в функции справки вторым l oop.
Sub TrickySplit()
Dim rawData As String
rawData = "season: 1983 colony: 12 colony weight: - kg yeild: 16 kg"
'[1] split to tokens omitting the 1st element "seasons"
' ~> 1983 colony, 12 colony weight, - kg yeild, 16 kg
Dim words: words = Split(rawData, ": "): words = Filter(words, words(0), False)
'[2] convert number strings or "-" to values
Dim i: For i = 0 To UBound(words): words(i) = Val(words(i)): Next
'[3] optional (display results in VB Editors Immediate Window
' ~> 1983,12,0,16
Debug.Print Join(words, ",")
End Sub
Дополнительные подсказки
ad) [1]
: классический Split()
через разделитель : "
приводит к 0- на основе массива:
season|1983 colony|12 colony weight|- kg yeild|16 kg
Первый элемент words(0)
~> season
не требуется и может быть немедленно удален функцией Filter()
, что приводит к:
1983 colony, 12 colony weight, - kg yeild, 16 kg
ad) [2]
: функция Val()
words(i) = Val(words(i))
использует тот факт, что она игнорирует следующие символы, даже интерпретируя "-"
как 0
(поэтому нет необходимости выполнять теоретическое второе разбиение через words(i) =Val(Split(words(i), " ")(0))
, чтобы удалить строку приложения) .