Метод №1: использование глобальных массивов.
У этого метода есть ограничение, о котором ниже, но для простых каких-то задач сгодится.
Как альтернатива - свои списки (упрощённые) использовать (
может допишу с ними пример сделал, ниже по теме "метод №2").
Была задачка разбить строку на подстроки по знаку-разделителю. Я захотел вернуть массив строк.
Просто через "Return mas" блитц не умеет. Поэтому я сделал глобальный массив для хранения результатов работы функции.
;инфа для возврата значений из функций
Dim RETVAL_STR$(0)
Global RETVAL_COUNT%
;smb - 1 символ типа запятой
Function fnSplitString(s$,smb$=",")
Local size% = Len(s)
Local cnt% = 0, k%
;сначала находим количество символов-разделителей
For k% = 1 To size
If(Mid(s,k,1) = smb) Then cnt = cnt + 1
Next
RETVAL_COUNT = cnt+1 ;запоминаем размер
Dim RETVAL_STR(cnt) ;расширяем до нужного размера
If(cnt = 0)
RETVAL_STR(0) = s
Return
EndIf
;теперь снова проходим, заполняя глобальный массив
Local val$ = "", char$, ind% = 0
For k% = 1 To size
char = Mid(s,k,1)
If(char = smb)
RETVAL_STR(ind) = val
val = ""
ind = ind+1
Else
val = val + char
If(k = size) Then RETVAL_STR(ind) = val ;последнюю подстроку тоже
EndIf
Next
End Function
На оптимальность работы функции я не претендую, мне нужно от неё парсить параметры в строчках типа
в момент загрузки уровня.
Пример использования:
fnSplitString("100,exit,-7")
For k% = 0 To RETVAL_COUNT-1
DebugLog("RETVAL_STR("+k+") = "+RETVAL_STR(k))
Next
Теперь о грустном. Вот это работать будет криво или загнётся:
Local s1$ = "0,0;1,0;1,1;0,1", s2$
fnSplitString(s1, ";") ;сначала разбиваем по точке-с-запятой
For k% = 0 To RETVAL_COUNT-1
DebugLog("RETVAL_STR("+k+") = "+RETVAL_STR(k))
fnSplitString(RETVAL_STR(k),",") ;теперь по запятой
For i% = 0 To RETVAL_COUNT-1
DebugLog("RETVAL_STR_2("+i+") = "+RETVAL_STR(i))
Next
Next
Очередной вызов функции затрёт массив, который используется в другом месте.