LISP. Лисп, удаляющий лишнее пробелы
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Лисп, удаляющий лишнее пробелы

LISP. Лисп, удаляющий лишнее пробелы

Ответ
Поиск в этой теме
Непрочитано 29.06.2011, 21:04 #1
LISP. Лисп, удаляющий лишнее пробелы
Yuzer
 
Мозговой штурм
 
Рідна ненька - Україна, Харків
Регистрация: 26.10.2008
Сообщений: 5,705

Доброго времени всем.
Наверное многие сталкывались с ситуацией, когда МТекст банально взорван и приходится его заново восстанавливать.
Через экспрессы это легко делается.
Но во время редактирования содержимого очень много лишних пробелов (нумерацией не все пользуются и о чудесных свойствах Tab и Shift+Tab тоже не все догадываются), особенно когда хотят наделать отступы.
Или подобная ситуация при копировании текста из ворда....

Может укажете на лисп, который бы чистил лишние пробелы (оставлял по одному между словами)?

Заранее спасибо.
Просмотров: 3295
 
Непрочитано 29.06.2011, 22:24
#2
Li6-D


 
Регистрация: 03.05.2009
Сообщений: 112


Долго не думая:
Код:
[Выделить все]
 (defun test (s)
  ;;Функция по удалению лишних пробелов из строки,
  ;;включая все пробелы в начале и в конце строки
  (vl-list->string
    (vl-remove-if '(lambda (s1) (= s (setq s s1) 32))
      (vl-string->list (vl-string-trim " " s))
) ) )
Код:
[Выделить все]
Команда: (test "      LISP.      Лисп,           удаляющий          лишнее           пробелы  ")
"LISP. Лисп, удаляющий лишнее пробелы"

Последний раз редактировалось Li6-D, 07.07.2011 в 20:06.
Li6-D вне форума  
 
Автор темы   Непрочитано 29.06.2011, 23:17
#3
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Запустить его не получилось....
Цитата:
defun test ()<Чего-то делаем 2>)

Можно будет вызывать только так:

Команда : (test)

И будут выполнены действия <Чего-то делаем 2>.
С точки зрения AutoCAD'a это 2 разных модуля.
Исходя из статьи - нужно ввести в комстроку: (str / s0)?

Цитата:
Команда: (str / s0)
; ошибка: no function definition: STR
Yuzer вне форума  
 
Непрочитано 29.06.2011, 23:22
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Yuzer, так ведь пример вызова показан же!
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.06.2011, 05:14
#5
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Все - теперь понял. Спасибо - получилось. Я так тож пробовал, только малость непривычно, что через Ф2 доставать нужно.
Я думал он будет работать по принципу выбора объекта и сразу себя на это настравивал..
Yuzer вне форума  
 
Автор темы   Непрочитано 01.07.2011, 05:56
#6
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Такой вопрос: у меня лист общих данных сделаный через МТекст, 3/4 А1 формата. С этим чего-то не получается...
Я правильно понимаю, делать нужно (test(содержимое МТекста))?
Yuzer вне форума  
 
Непрочитано 01.07.2011, 08:47
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Yuzer Посмотреть сообщение
(test(содержимое МТекста))
После этого ты получешь содержимое текста без двойных пробелов, его еще надо записать в тот-же текст.
То есть что-то вроде ((lambda (obj) (vla-put-textstring obj (test(vla-get-textstring obj)))) (vlax-ename->vla-object ent))
где ent указатель на text/mtext.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 01.07.2011 в 10:21.
Дима_ вне форума  
 
Непрочитано 04.04.2023, 04:51
#8
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Простая программа удаляющая все пробелы из строки:
Код:
[Выделить все]
 (defun StrTrim(str / i j NewStr SChr)
;Функция удадяет пробелы из строки
	(setq i 1 j (strlen str) NewStr "")
	(while (<= i j)
		(setq SChr (substr str i 1))
		(if (/= SChr " ")
		(setq NewStr (strcat NewStr SChr)))
		(setq i (+ i 1))
	)
	NewStr
) ;_ end of defun StrTrim
МишаИнженер вне форума  
 
Непрочитано 04.04.2023, 08:13
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Простая программа удаляющая все пробелы из строки:
Код:
[Выделить все]
 (defun StrTrim(str / i j NewStr SChr)
;Функция удадяет пробелы из строки
	(setq i 1 j (strlen str) NewStr "")
	(while (<= i j)
		(setq SChr (substr str i 1))
		(if (/= SChr " ")
		(setq NewStr (strcat NewStr SChr)))
		(setq i (+ i 1))
	)
	NewStr
) ;_ end of defun StrTrim
У тебя тут сносятся вообще все пробелы, в отличии от #2. Скорость работы тоже вызывает вопросы:
Код:
[Выделить все]
_$ (setq str "      LISP.      Лисп,           удаляющий          лишнее           пробелы  ")
"      LISP.      Лисп,           удаляющий          лишнее           пробелы  "
_$ (test str)
"LISP. Лисп, удаляющий лишнее пробелы"
_$ (strtrim str)
"LISP.Лисп,удаляющийлишнеепробелы"
_$ (BENCHMARK '((test str) (strtrim str)))
Benchmarking ................Elapsed milliseconds / relative speed for 8192 iteration(s):

    (TEST STR)........1813 / 2.14 <fastest>
    (STRTRIM STR).....3875 / 1 <slowest>
_$
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.04.2023, 11:24
#10
1958


 
Регистрация: 16.04.2016
Сообщений: 107


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
У тебя тут сносятся вообще все пробелы, в отличии от #2.
Ну, так он честно написал:


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Простая программа удаляющая все пробелы из строки
1958 вне форума  
 
Непрочитано 04.04.2023, 11:31
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ну а если посмотреть на стартовый пост темы?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Лисп, удаляющий лишнее пробелы



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19