Преобразовать текстовый список в массив, чтобы в цикле работать с элементами.
Попробовал методом поиска и 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)