Описание функции
SplitM
Разделяет строку и создаёт карту из элементов.
SplitM(String.s, Map StringMap.s() [, Separator.s = " " [, CaseSensitive = 1 ]])
Параметры
String.s | Строка, которую необходимо разделить |
StringMap.s() |
Заранее созданная карта (будет очищена перед использованием), являющаяся результатом работы функции. |
Separator.s |
Символ являющийся разделителем. Если это строка более одного символа она целиком будет как разделитель. |
CaseSensitive |
0 - без учёта регистра 1 - с учётом регистра |
Возвращаемое значение
ничего |
Примечания
В отличии от списка карта хранит по одному экземпляру ключей, а значит это равносильно удалению дубликатов.См. также
SplitL,Пример
; AZJIO, создал на основе SplitL
Procedure SplitM(String.s, Map StringMap.s(), Separator.s = " ", CaseSensitive = 1)
Protected S.String, *S.Integer = @S
Protected.i p, slen
slen = Len(Separator)
ClearMap(StringMap())
*S\i = @String
Repeat
p = FindString(S\s, Separator)
If CaseSensitive
AddMapElement(StringMap(), PeekS(*S\i, p - 1))
Else
AddMapElement(StringMap(), LCase(PeekS(*S\i, p - 1)))
StringMap() = PeekS(*S\i, p - 1)
EndIf
*S\i + (p + slen - 1) << #PB_Compiler_Unicode
Until p = 0
*S\i = 0
EndProcedure
Define St.s = "Это тестовая строка, чтобы проверить, работают ли разделение."
NewMap WordsMap.s()
SplitM(St, WordsMap())
ForEach WordsMap()
Debug MapKey(WordsMap())
Next