Описание функции


SplitM

Разделяет строку и создаёт карту из элементов.

SplitM(String.s, Map StringMap.s() [, Separator.s = " " [, CaseSensitive = 1 ]])

Параметры

String.s Строка, которую необходимо разделить
StringMap.s() Заранее созданная карта (будет очищена перед использованием), являющаяся результатом работы функции.
Separator.s Символ являющийся разделителем. Если это строка более одного символа она целиком будет как разделитель.
CaseSensitive 0 - без учёта регистра
1 - с учётом регистра

Возвращаемое значение

ничего

Примечания

В отличии от списка карта хранит по одному экземпляру ключей, а значит это равносильно удалению дубликатов.
При учёте регистра используем MapKey(), чтобы взять ключи, а при "без учёта регистра" используем значения, в которых находятся оригинальные строки, а в ключах эта же строка, но в нижнем регистре, чтобы отсеивать дубликаты без учёта регистра.

См. также

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