Начал писать прогу и появилась задача из списка путей получить путь, указав имя программы. То есть надо найти текст и от этой позиции просмотреть назад и вперёд до переноса строки. Подумал что эту задачу можно выполнить в виде отдельной функции. Из недостатков - поиск #CRLF$, хотя лучше было бы любой из этих символов. Реверсирование строки для поиска можно было бы сделать отправив строку в массив и перебирать буквы в цикле назад от большего к меньшему.
EnableExplicit Global tmp$, tmp2$, lst$, ProgList$, ProgNameTest$, Pos, Pos2, NewPos ProgNameTest$ = "AkelPad" ProgNameTest$ + "." ; Читаем список программ lst$ = GetPathPart(ProgramFilename()) + "\list.txt" If FileSize(lst$) > 3 ReadFile(0, lst$) ProgList$ = #CRLF$ + ReadString(0, #PB_UTF8 | #PB_File_IgnoreEOL) + #CRLF$ CloseFile(0) EndIf ; MessageRequester("1", "|" + ProgList$ + "|") ; проверка позиций, что взято имя без пробелов и переносов Pos = FindString(ProgList$, ProgNameTest$, 0, #PB_String_NoCase) ; ищем программу в списке прог, позиция в центре строки NewPos = Pos - #MAX_PATH ; сдвигаем позицию до начала строки ; Length = #MAX_PATH If NewPos < 0 ; в случае если прога в самом начале, а может проще встроить в список прог комментарий ; Length = - NewPos NewPos = 1 EndIf Pos = FindString(ProgList$, #CRLF$, Pos, #PB_String_NoCase) ; Найти конец строки tmp$ = Mid(ProgList$, NewPos, Pos - NewPos) Pos2 = FindString(ReverseString(tmp$), #LFCR$) ; ищем начало строки методом реверса строки и поиска от начала к концу tmp$ = Mid(tmp$, Len(tmp$) - Pos2 + 2) ; получаем строку "путь" целиком ; Pos = FindString(tmp$, "|", 0, #PB_String_NoCase) ; ; If Pos ; tmp2$ = Mid(tmp$, Pos + 1) ; tmp$ = Mid(tmp$, 0, Pos -1) ; EndIf MessageRequester("1", "|" + tmp$ + "|")
список, файл list.txt
C:\Program Files (x86)\HxD\HxD.exe C:\Program Files (x86)\Notepad++\Notepad++.exe C:\Program Files (x86)\AkelPad\AkelPad.exe C:\Program Files (x86)\ResHacker\ResHacker.exe