25.01.2011 08:22    

rub0938
Sevğili arkadaşlar ben basit bir lisp arıyorum Secilen textlerin başına veya sonuna harf veya rakam eklemesi yapabilen bir lisp mesela 1,2,3 rakamlarını mouse ile seçtikten sonra S1,S2,S3 yapabilecek bir lisp yapılabilirmi cevaplarınızı bekliyorum yardımlarınız için şimdiden teşekkür ederim

25.01.2011 10:00    

halilozcakir


Linkleri görebilmek için ÜYE olmalısınız.


link işine yarayabilir.

25.01.2011 11:25    

ProhibiT
Bu fonksiyonu ben unutmuştum, Başa Sona Ekle kelimelerinden BSE adlı fonksiyon.
Teşekkürler halilozcakır, nostalji oldu benim için :)

25.01.2011 11:28    

rub0938
sayın halil özçakır bey yardımınız için çok teşekkür ederim

12.03.2011 11:25    

hgkyrl
Merhaba

eklediğiniz link açılmıyor hata veriyor

detay alabilirmiyim bse fonkdiyonu nasıl işler ?
teşekkürler

16.03.2011 15:30    

halilozcakir
Sitede biryerlededir üstadlar düzeltir yakında ..

16.03.2011 18:20    

ProhibiT
Merhaba halilozcakir :) verdiğin linki ve fonksiyonu ben de bulamadım.

Kod:

(defun c:AA ()
(setq yz (ssget (list (cons 0 "*text"))) L (sslength yz) n -1)
(while (< (setq n (1+ n)) L) (setq pvt (entget (ssname yz n))
  pvt (subst (cons 1 (strcat "S" (cdr (assoc 1 pvt)))) (assoc 1 pvt) pvt))
  (entmod pvt) (entupd (cdr (assoc -1 pvt))))
)

Şeklinde basit bir fonksiyon verip geçilebilirdi. Sorulan soruyu karşılar, ama sorumluluk duygumuz buna izin vermez :)

Kod:

;;;=======================================================================
;;; Komut adı: OSe
;;; Seçilen Text ve Mtext objelerine, Önek veya Sonek Ekler veya Çıkarır.
;;; Hazırlayan, M. Şahin Güvercin - 16-03-2011 19:45
;;;=======================================================================
(defun c:OSe (/ Oe Se iS yzL L L0 L1 L2 pvt yaz)
  (setvar "cmdecho" 0) (command "undo" "group")
  (setvar "modemacro" "Prepared by; M. S. Guvercin")
  (setq Oe (getstring "\n  Önek : ") Se (getstring "\n    Sonek : "))
  (if (or (/= Oe "") (/= Se ""))
    (progn
      (if (= oiS nil) (setq oiS "Ekle")) (initget "Ekle / Cikar")
      (if (not (setq iS (getkword (strcat "\n Ekle/Çikar (E/C) <" oiS ">: "))))
        (setq iS oiS) (setq oiS iS))
      (princ "\n    Önek/Sonek işlemi yapılacak Text'leri seçiniz...")
      (setq yzL (ssget (list (cons 0 "*Text")))
            L (sslength yzL) n -1 L1 (strlen Oe) L2 (strlen Se))
      (while (< (setq n (1+ n)) L)
        (setq pvt (entget (ssname yzL n))
              yaz (cdr (assoc 1 pvt)) L0 (strlen yaz))
        (cond ((= iS "Ekle") (progn
                 (if (and (/= Oe "") (/= Oe (substr yaz 1 L1)))
                   (setq yaz (strcat Oe yaz) L0 (strlen yaz)))
                 (if (and (/= Se "") (/= Se (substr yaz (- (1+ L0) L2) L2)))
                   (setq yaz (strcat yaz Se) L0 (strlen yaz)))))
              ((= iS "Cikar")
               (progn
                 (if (and (/= Oe "") (= Oe (substr yaz 1 L1)))
                   (setq yaz (substr yaz (1+ L1) (- L0 L1)) L0 (strlen yaz)))
                 (if (and (/= Se "") (= Se (substr yaz (- (1+ L0) L2) L2)))
                   (setq yaz (substr yaz 1 (- L0 L2))  L0 (strlen yaz))))))
        (setq pvt (subst (cons 1 yaz) (assoc 1 pvt) pvt))
        (entmod pvt) (entupd (cdr (assoc -1 pvt))))))
  (command "undo" "e") (setvar "modemacro" "") (prin1)
)
(princ "\n Hazırlayan, M. Sahin Guvercin - www.autocadokulu.com")

Şeklinde genel amaçlı bir fonksyion yazdım. Seçilen Text veya Mtext gurubuna Önek veya Sonek (biri ya da her ikisi) ekler veya çıkarır.

Ekleme ya da çıkarma yaparken;
- Seçilen obje gurubunda Text ya da Mtext olmayan objeler işleme alınmaz. Yani özgürce seçim yapabilirsiniz.
- Önek ya da Sonek eklenirken, seçim gurubu içinde verilen Önek veya Sonek zaten varsa bunlar tekrar işleme alınmaz.
- Önek ya da Sonek çıkarılırken, söz konusu ekleri içermeyen objeler işleme alınmazlar.

Herkese kolay gelsin.

Düzenleme:
11 yıl sonra fonksiyonun orijinal haline ilişmeden düzenleme yapıldı.
Kod:

;|============================================================================|
| Komut adı: OSe                                                             |
| Seçilen Text ve Mtext objelerine, Önek veya Sonek Ekler veya Çıkarır.      |
| Hazırlayan, M. Şahin Güvercin - 16-03-2011 19:45                           |
|                                                                            |
| 07.04.2022 tarihli güncelleme ve düzenlemeler:                             |
|  - *error* hata yakalama fonksiyonu eklendi.                               |
|  - Hem Önek hemde Sonek değerlerinin boş olması durumunda çıkış yaplılır.  |
|  - cond işlevi içindeki progn'ler kaldırıldı.                              |
|  - while döngüsü sayaç değerine değil, varlık-yokluk kontrolüne bağlandı.  |
|————————————————————————————————————————————————————————————————————————————|;
(defun c:OSe (/ *error* Oe Se iS yzL L0 L1 L2 PvT yaz)
  (defun *error* (er /)
    (if (member er '("Function cancelled" "quit / exit abort"))
      (princ (strcat "\n*Error* " er))
      (princ "\n  Hem Önek hemde Sonek boş olamaz!"))
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (setvar "modemacro" "") (prin1))
  (setq ocmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "undo" "group")
  (setq Oe (getstring T "\n  Önek : ") Se (getstring T "\n  Sonek : "))
  (if (and (= Oe "") (= Se "")) (*error*))
  (if (not oiS) (setq oiS "Ekle")) (initget "Ekle Çıkar")
  (setq iS (getkword (strcat "\n Ekle/Çıkar (E/Ç) <" (if oiS oiS "") ">: ")))
  (if (not iS) (setq iS oiS) (setq oiS iS))
  (princ "\n Önek/Sonek işlemi yapılacak Text'leri seçiniz...")
  (setq yzL (ssget (list (cons 0 "*Text"))) L1 (strlen Oe) L2 (strlen Se) n -1)
  (while (setq PvT (ssname yzL (setq n (1+ n))))
    (setq PvT (entget PvT) yaz (cdr (assoc 1 PvT)) L0 (strlen yaz))
    (cond ((= iS "Ekle")
           (if (and (/= Oe "") (/= Oe (substr yaz 1 L1)))
             (setq yaz (strcat Oe yaz) L0 (strlen yaz)))
           (if (and (/= Se "") (/= Se (substr yaz (- (1+ L0) L2) L2)))
             (setq yaz (strcat yaz Se) L0  (strlen yaz))))
          ((= iS "Çıkar")
           (if (and (/= Oe "") (= Oe (substr yaz 1 L1)))
             (setq yaz (substr yaz (1+ L1) (- L0 L1)) L0 (strlen yaz)))
           (if (and (/= Se "") (= Se (substr yaz (- (1+ L0) L2) L2)))
             (setq yaz (substr yaz 1 (- L0 L2)) L0 (strlen yaz)))))
    (setq PvT (entmod (subst (cons 1 yaz) (assoc 1 PvT) PvT))
          PvT (entupd (cdr (assoc -1 PvT)))))
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if ocmd (setvar "cmdecho" ocmd)) (prin1))

İhtiyaç duyup kullanacakların bu son halini kullanmalarını tavsiye ederim.

ProhibiT (07.04.2022 10:03 GMT)

17.03.2011 11:56    

hgkyrl
Elinize sağlık üstad
çok harika denerken bile çok keyf aldım
siz bu lisp kodlarını oluştururken kimbilir ne kadar keyf alıyorsunuzdur.
sonucunu görünce özellikle...

17.03.2011 12:21    

ProhibiT
Yazarken o kadar da keyifli olmuyor doğrusu :) yazmaya başlamadan önce, bazen bir kaç gün, bazen de daha uzun süren, bazen de hiç bitmeyen o zihinde şekillendirme aşaması çok keyifli bence. düşüncede çözülmüş, bitmiş bir şeyi kodlaması o kadar heyecan verici değil. burada paylaşılması ise; sancılı bir süreçte sabaha karşı şiirini bitirip, son halini ilk karşılaştığı kişiye "günaydın" demeden, onun yerine şiirini okuyan şairin, dinleyenin yüzüne yansıyan güzellik karşısında hissettikleri böyle bir şeydir sanıyorum. ve elbette en keyiflisi de, birilerinin o şiiri anlaması (aşağıdaki imzamda da bunu yazdım zaten) asıl güzel olan işte bu. burada autocadokulu ortamındaki tüm komşularımızın aynı keyifleri yaşamalarını diliyorum :)

19.03.2011 14:14    

sinancakal37
Süper ya teşekkürler çok işime yarayacak

02.12.2011 21:12    

KÖPRÜ-YOL
Şahin hocanın bu lispini deneme şansı buldum..Sonunda zaten "0" sıfır var ise ayrıca eklemiyor..Örneğin seçilen seride 15 ve 50 rakamları olsun.Seçip "0" sıfır" ekle denince.. 15, 150 olurken 50 olduğu gibi kalıyor....Birde ne hikmetse bu lispi undo ile geri alamiyorsunuz..Bu da ayrı bir mesele..Bilgi amaçlı yazdım..Yine de teşekkür ederim..Güzel denemeydi..

03.12.2011 07:57    

ProhibiT
Algoritmayı kurarken, ekleme durumunda, önek veya sonek text içinde zaten mevcut ise tekrar eklenmemesi şeklinde bir kontrol mantığı kuruldu. 50'ye sonek olarak 0 eklemeye çalışılınca, zaten sonu 0 olduğu için ekleme yapmaz. fonksiyon işleyiş mantığı bilerek böyle kuruldu. nümerik işlem yapmak zaten hedeflenmiyor. fonksiyon normal yolla sonlanırsa undo yapılmaması için hiç bir sebep yok...

ProhibiT (03.12.2011 20:04 GMT)

26.10.2019 15:42    

selcukkpr
Lispi kullandım ve çok işime yaradı. 1400 e yakın sayının başına B. yazmam gerekiyordu. Tek seferde yazdım. Konu üzerinden 8 yıl geçmiş tekrar hortlatmak istemezdim ama TEŞEKKÜR etmeden de geçemeyeceğim. Çok sağolun Şahin bey.

> 1 <
Copyright © 2004-2022 SQL: 1.404 saniye - Sorgu: 87 - Ortalama: 0.01613 saniye