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

20.13. Как разредить текст пробелами?

В: Как разредить текст пробелами?

Например, сделать разрежение текста через каждые три символа.

О:

Для того, чтобы сделать подобное, понадобятся функции для работы с текстом и цикл.

Простой алгоритм для разрежения текста (отсчёт начинается от первого символа в строке):

!$text - здесь лежит текст
! полученный текст будем записывать в переменную $result
! Объявляем локальный массив для того, чтобы временно сохранить фрагменты текста
local $res_
! Разбиваем текст посимвольно, каждый символ помещаем в отдельную ячейку массива:
scanstr '$res_', $text, '[\s\S]'
! теперь просто склеиваем весь текст с помощью цикла обратно в строку:
loop while arrsize('$res_') step killvar '$res_', 0:
$result += $iif(len($result), ' ' + $res_[0], $res_[0])
end

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

! Может так оказаться, что число символов нашего текста не делится нацело на три,
! поэтому сначала добавляем недостающее число символов к тексту
local mod_ = len($text_) mod 3 & ! сколько символов не хватает
! добавляем символы, тупо вырезая их из строки, но только если их не хватает
if mod_ > 0: $text_ += $mid($text_, 1, 3 - mod_)
! Разбиваем текст на трёхсимвольные фрагменты,
! каждый фрагмент помещаем в отдельную ячейку массива:
scanstr '$res_', $text_, '[\s\S]{3}'
! У последнего фрагмента отрезаем добавленные символы
if mod_ > 0: $res_[arrsize('$res_')-1] = $mid($res_[], 1, mod_)
! теперь просто склеиваем весь текст с помощью цикла обратно в строку:
loop while arrsize('$res_') step killvar '$res_', 0:
$result += $iif(len($result), '|' + $res_[0], $res_[0])
end

Примеры: