Перейти к основному содержимому

20.5. Как можно удалить часть текста из описания?

В: Как можно удалить часть текста из описания?

О:

Если вы точно знаете, какую часть описания вам нужно удалить, можно использовать простой алгоритм:

! запоминаем описание
local $description = $maintxt
! С помощью функции $replace заменяем полученное значение на значение с удалённой строкой
$description = $replace($description, "строка, которую хотим удалить")
! стираем основное описание
*clr
! выводим новое
*p $description

В данном случае мы удаляем все строки, соответствующие указанной. Третий параметр функции $replace позволяет удалить одно или несколько первых вхождений, если вам не нужно удалять все.

Возможно вам понадобится удалить одно из вхождений, но не в самом начале описания, а, допустим, в середине. Т.е., к примеру, вхождение встречается пять раз, а удалить нам нужно только третье. Для этого придётся написать код наподобие этого:

! строка,которую хотим удалить
$killstr="#F92672"
! запоминаем описание
$description=$maintxt
! с помощью цикла и функции instr, определяем, с какого символа начинается вхождение
local iNum=3 & ! номер вхождения, которое хотим удалить
local i=1 & ! счётчик начинается с 1, так как естественно вхождения нумеруются с 1
local fromPos=0 & ! с какого символа начинать поиск вхождения
local in_str=0 & ! с какого символа начинается вхождение
loop while 1 step i+=1:
in_str = instr($description, $killstr, fromPos+1)
! проверяем, достигли ли мы нужного вхождения
if i<iNum and in_str <> fromPos:
! нет, это всё ещё не то вхождение, просто перемещаем символ,
! с которого начинаем поиск, на следующий за найденным вхождением
fromPos = in_str
else:
! нашли нужное вхождение
! вырезаем первую часть до вхождения
$part_1=$mid($description,1,in_str-1)
! вырезаем часть после вхождения
$part_2=$mid($description,in_str+len($killstr))
! собираем новое описание
$description=$part_1+$part_2
jump 'end_cycle' & ! прерываем цикл
end
end
:end_cycle
! стираем основное описание
*clr
! выводим новое
*p $description

Примеры: