Преобразовать текстовый список в массив, чтобы в цикле работать с элементами.
Попробовал методом поиска и Mid, надеюсь это работает с указателями и быстрее чем StringField. Скорость не тестировал.
EnableExplicit
Define String$ = "проверка, 1 что 1 поля 1 захватываются 1 в 1 массив"
Define count, i
Procedure.s Fields(String$, Field$)
Protected Pos, TmpPos, Res$, Length
Length = Len(Field$)
String$ + Field$
Pos = 1 - Length
Repeat
TmpPos = Pos + Length
Pos = FindString(String$, Field$, TmpPos, #PB_String_NoCase)
If Pos
Res$ + "|" + Mid(String$, TmpPos, Pos - TmpPos) + "|" + #CRLF$
Else
ProcedureReturn Res$
EndIf
ForEver
EndProcedure
Procedure aFields(String$, Field$, Array aRes.s(1))
Protected Pos, TmpPos, Length, i
Length = Len(Field$)
String$ + Field$
Pos = 1 - Length
i = 0
Repeat
TmpPos = Pos + Length
Pos = FindString(String$, Field$, TmpPos, #PB_String_NoCase)
If Pos
i + 1
ReDim aRes(i)
aRes(i) = Mid(String$, TmpPos, Pos - TmpPos )
Else
ProcedureReturn i
EndIf
ForEver
EndProcedure
Procedure lFields(String$, Field$, List Res.s())
Protected Pos, TmpPos, i, Length
Length = Len(Field$)
String$ + Field$
Pos = 1 - Length
Repeat
TmpPos = Pos + Length
Pos = FindString(String$, Field$, TmpPos, #PB_String_NoCase)
If Pos
AddElement(Res())
Res() = Mid(String$, TmpPos, Pos - TmpPos )
Else
ProcedureReturn ListSize(Res())
EndIf
ForEver
EndProcedure
Debug "=== Array ==="
Dim aRes.s(0)
count = aFields(String$, " 1 ", aRes())
For i = 1 To count
Debug aRes(i)
Next
Debug #CRLF$ + "=== List ==="
NewList Res.s()
count = lFields(String$, " 1 ", Res())
ForEach Res()
Debug Res()
Next
MessageRequester("", Fields(String$, " 1 "))Отредактировано AZJIO (18.12.2020 00:06:00)
