Forth http://fforum.winglion.ru/ |
|
*удалить вертикальный блок из текста http://fforum.winglion.ru/viewtopic.php?f=19&t=2560 |
Страница 1 из 1 |
Автор: | mOleg [ Сб апр 03, 2010 10:28 ] |
Заголовок сообщения: | *удалить вертикальный блок из текста |
дано: в памяти по указанному адресу находится текстовый блок, включающий в себя некоторое количество строк в ISO кодировке(т.е. размер символа фиксирован и равен одному байту). В явном виде заданы адрес начала блока и его длина. Каждая строка отделена от следующей символом(символами) перевода строки. Необходимо удалить из текста прямоугольный блок, заданный начальной строкой и начальной позицией в строке, начиная с которой будет вырезаться текстовый блок, а так же количество строк и количество символов, которые необходимо вырезать из текста. В случае, если заданный размер блока выходит за пределы текстового блока, удалять только существующие символы в строке и строки в тексте. \ удалить вертикальный блок из текста \ вернуть адрес начала и длину результирующего текста : del-block ( pos-x pos-y #x #y addr # --> addr # ) ; |
Автор: | chess [ Вт апр 06, 2010 16:50 ] |
Заголовок сообщения: | |
Код: : del-block { a u x y dx dy \ at yt -- a u } a TO at u 0 DO I a + C@ 0xA = IF yt y y dy + WITHIN IF at x + dx + at x + u at x + a - - MOVE dx NEGATE R@ + RP@ ! THEN a I 1+ + TO at yt 1+ TO yt THEN yt 1+ y dy + > IF LEAVE THEN LOOP a u dy dx * - ; \ EOF : cr! S" 0x0A0D SWAP 2R@ DROP + W!" EVALUATE ; IMMEDIATE : s1 S" 01234..56789..ABCDRTTY..RWRWRT.." \ 5 12 22 30 2>R 5 cr! 12 cr! 22 cr! 30 cr! 2R> ; s1 TYPE CR s1 1 1 2 3 del-block TYPE LOG Код: 01234
56789 ABCDRTTY RWRWRT 01234 589 ADRTTY RWRT Ok |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |