Напишу на пурике - но общий алгоритм думаю понятен. Фиг знает как с производительностью...
Наверно нужно ограничение на длину семпла...
data.s=... ;Исходные данные
max_sample.i=10 ;Ограничение на длину семпла
Structure sample
List Pos.i()
EndStructure
NewMap Samples.Sample()
;Перебираем все символы - позиция "курсора"
For pos=1 To Len(data)
;Перебираем семплы разной длины от данной позиции
For sample_len=1 to max_sample
cur_sample.s=Mid(data,pos,sample_len)
;Ищем данный семпл в сохраненных
If FindMapElement(Samples(),cur_sample)=0
;Если нет, добавляем
AddMapElement(Samples(),cur_sample)
;Ищем данный семпл в оставшейся части данных, запоминаем позиции
find_pos=FindString(data,cur_sample,pos)
Repeat
AddElement(Samples()\Pos())
Samples()\Pos()=find_pos
find_pos=find_pos+Len(cur_sample)
find_pos=FindString(data,cur_sample,find_pos)
Until find_pos>0
EndIf
Next
Next
В итоге получим кучу записей Samples() со списком позиций в каждой.