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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вопрос про ТЕКСТ?

Вопрос про ТЕКСТ?

Ответ
Поиск в этой теме
Непрочитано 19.07.2004, 10:05 #1
Вопрос про ТЕКСТ?
ilka_t
 
Москва
Регистрация: 20.01.2004
Сообщений: 154

Есть массив чисел , и к ним нужно прибавить число.
Еть к примеру 3, 4, 5 и тд и к ним прибавить (вычесть) 3, чтобы получилось 6, 7, 8
Просмотров: 6425
 
Непрочитано 19.07.2004, 10:31
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Так про что?
Цитата:
Вопрос про ТЕКСТ?
или
Цитата:
массив чисел
Alan вне форума  
 
Непрочитано 19.07.2004, 10:40
#3
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


Команда из EXPRESSов.
Называется TCOUNT.
Torino вне форума  
 
Автор темы   Непрочитано 19.07.2004, 10:51
#4
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


Имел в виду просто текст, который расположен хаотично , и к этому всему тексту надо прибавить или вычесть определеноое число
ilka_t вне форума  
 
Автор темы   Непрочитано 19.07.2004, 10:58
#5
ilka_t


 
Регистрация: 20.01.2004
Москва
Сообщений: 154


>>> Torino

tcount не подходит он автоматически нумерует текст по Х или по Y , с заданного числа , а мне нужно чтобы он прибавлял число
или я не понял как с ним
ilka_t вне форума  
 
Непрочитано 19.07.2004, 13:05
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Слепил коротенький лиспик. Обрабатывает только DText. Сначала выбрать числа, потом ввести приращение или уменьшение с "-" (можно вещественное число).
Код:
[Выделить все]
(defun c:adn (/ numSet addNum Counter maybeNumber curText newNumb)
  (vl-load-com)
  (setvar "cmdecho" 0)
  (princ "*** Select numbers and press [Enter] ***")(terpri)
  (setq numSet(ssget)
	addNum(getreal "Enter increment or decrement: ")
	Counter 0
	)
  (repeat(sslength numSet)
    (setq curText(vlax-ename->vla-object(ssname numSet Counter)))
    (if(= "AcDbText"(vla-get-ObjectName curText))
      (progn
      (if(/= 0.0(setq maybeNumber(atof(vla-get-TextString curText))))
	(progn
	(setq newNumb(+ maybeNumber addNum))
	(vla-put-TextString curText newNumb)
        ); end progn
	); end if
	);end progn
      ); end if
      (setq Counter(1+ Counter))
    ); end repeat
  (princ)
  )
Вопрос к более опытным товарищам типа VK. Функция ATOF при аргументе который невозможно преобразовать в вещественное число возвращает 0.0 а не Nil. А как проверить содежал ли стринг вещественное число в таком случае?
{Smirnoff} вне форума  
 
Непрочитано 19.07.2004, 13:24
#7
Arkady

AutoCad Development and Support
 
Регистрация: 21.08.2003
Israel
Сообщений: 183
Отправить сообщение для Arkady с помощью Skype™


Можно проверить с помощью TYPE:
(type (read "11")) - вернет 'INT
(type (read "11.0")) - - вернет 'REAL
(type (read "A11.0")) - - вернет 'SYM
Arkady вне форума  
 
Непрочитано 19.07.2004, 13:39
#8
Torino


 
Регистрация: 21.08.2003
Штаб
Сообщений: 943
<phrase 1=


>>ilka_t
Прошу прощения - не разобрался в вопросе.
Torino вне форума  
 
Непрочитано 19.07.2004, 14:25
#9
Grinzaid

Архитектор
 
Регистрация: 14.10.2003
Израиль
Сообщений: 365
<phrase 1=


Вот нашёл у себя такое:

Код:
[Выделить все]
;****  NJ  activates the lisp  ********************
;this routine lets you pick text numbers and add or subtract a chosen number from them.
;very usefull for changing numbered stairs

(defun c:nj () sel num qsel ent aa tt t1 n nn t2 t3  

;pick an object

(setq sel (ssget '((0 . "text"))))    ;picks text objects
(if (/= sel nil)
 (progn
 (setq num (getint "enter the number of increase or decrease : "))       ; gets number from user
 (setq qsel (sslength sel))            ;counts the number of text objects 
 (setq qsel (- qsel 1))                ;
  (repeat (+ qsel 1)                   ;starts loop of objects
  (setq ent (ssname sel qsel))         ;gets name of first object   
  (setq aa (entget ent))               ;gets info on the object

  (setq tt (assoc 1 aa))                ;gets text info
     (setq t1 (cdr tt))                 ;gets clear text
     (setq n (atoi t1))                 ;translates text into an integer
     
      (setq nn (+ n num))             ;sets nn as the new number
      (setq t3 (itoa nn))             ;translates number into text
      
  ;makes the switch

  (setq aa                              ;switches the original text (t1) with modified (t3) 
    (subst (cons 1 t3)
     (assoc 1 aa)    
      aa
      )
  )
  (entmod aa)                           ;updates entity
  (entupd ent)
 (setq qsel (- qsel 1))                ;countdown to the next entity
  )

(princ)
)
)
)
__________________
С уважением,
Влад Гринзайд.
Grinzaid вне форума  
 
Непрочитано 19.07.2004, 14:47
#10
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Спасибо Аркадий! Век живи, век учись...

Тогда более логично. Прошлый ЛИСП не отличал (и соответственно не обрабатывал) текст 0.0 от любого другого.
Код:
[Выделить все]
(defun c:adn (/ numSet addNum Counter curText newNumb)
  (vl-load-com)
  (setvar "cmdecho" 0)
  (princ "Select numbers and press [Enter]")(terpri)
  (setq numSet(ssget '((0 . "Text")))
	addNum(getreal "Enter increment or decrement: ")
	Counter 0
	)
  (repeat(sslength numSet)
    (setq curText(vlax-ename->vla-object(ssname numSet Counter)))
      (if(or(=(type(read(setq maybeNumber(vla-get-TextString curText))))'REAL)
	    (=(type(read(setq maybeNumber(vla-get-TextString curText))))'INT)
	    ); end or
	(progn
	(setq newNumb(+ (atof maybeNumber) addNum))
	(vla-put-TextString curText newNumb)
        ); end progn
	); end if
      (setq Counter(1+ Counter))
    ); end repeat
  (princ)
  )
{Smirnoff} вне форума  
 
Непрочитано 19.07.2004, 17:07
#11
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Ну и я свой вариант выдам(хотя практически он ничем не отличается
от других)
Код:
[Выделить все]
(defun calk2(kz)
  (vl-load-com)
  (if
      (and
      (setq nbt(ssget '((0 . "text"))
		      )
	    )
      (setq nbt  (mapcar 'vlax-ename->vla-object
			(vl-remove-if 'listp
			  (mapcar 'cadr
				(ssnamex nbt)
				)
			)
		  )
	    )
    
      (setq nbt (vl-remove-if-not
		  '(lambda(x)
		     (or
		       (equal
			 (type
			   (read
			     (vla-get-textstring x)
			     )
			   )'INT
			 )
		       (equal
			 (type
			   (read
			     (vla-get-textstring x)
			     )
			   )'REAL
			 )
		       )
		     )nbt
	    
	    )
      )
      )
    (progn
      (foreach i nbt
	(vla-put-textstring i
	  (rtos
	    (+
	      (distof
		(vla-get-textstring i)
		) kz)
	    )
	  )
	)
      )
    )
  (princ)
  )
Эдуард вне форума  
 
Непрочитано 19.07.2004, 18:01
#12
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Эдуард
Браво! Преобразование набора в список я пожалуй запомню... Спасибо. И остальное как всегда изысканно.
{Smirnoff} вне форума  
 
Непрочитано 20.07.2004, 21:50
#13
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Fantomas
>Эдуард

А почему бы не пользоваться функцией member чтоб проверить на выполнение одного из нескольких условий? Код вроде бы упрощается...
В последнем варианте Фантомаса:
Код:
[Выделить все]
.......
(if (member (type (read (setq maybeNumber (vla-get-textstring curText)))) '(REAL INT))
.........
PS: (setvar "cmdecho" 0) кажись не надо :wink:
vk вне форума  
 
Непрочитано 20.07.2004, 22:35
#14
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VK
С MEMBER хорошо смотрится. Прекрасный прием, вместо использования OR и еще кучи выражений. Спасибо.
CMDECHO - на автомате написал.
{Smirnoff} вне форума  
 
Непрочитано 21.07.2004, 02:14
#15
leha

ACAD, UG, CATIA - программирование
 
Регистрация: 17.09.2003
Таганрог
Сообщений: 9


И я добавлю
Разница между atof и distof (из Help'а):

atof:
Return Values
A real number.

distof:
Return Values
A real number, if successful, otherwise nil.


Т.е. можно (в варианте Fantomas'а):
Код:
[Выделить все]
     ...
     (if (setq maybeNumber (distof (vla-get-TextString curText)))
       (vla-put-TextString curText (+ maybeNumber addNum))
     );if
     ...
Хотя все это уже действительно "фигня, на скорость не влияет".
leha вне форума  
 
Непрочитано 21.07.2004, 11:00
#16
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Хе, хе! >leha [sm2001]
{Smirnoff} вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Вопрос про ТЕКСТ?

Размещение рекламы