23.04.2021 18:49    

Travaci
Kod:

(if (setq fl (getfiled "Select csv file" "" "csv" 1) )
  (setq fl (open fl "r"))

Bu şekilde mi ?

24.04.2021 07:46    

BLack|E
Alıntı
Travaci :


Hayır hocam ben klasörü seçeceğim klasörün içinde
örneğin 5 adet csv uzantılı dosyalar var
isimleri 2A1, 2A2, 2A3, 2A4, 2A5 olsun
klasör seçiminden sonra bu 5 dosyayı tek tek açtırıp lispin içinde işlem yaptıracağım.
normal açmaktan bahsetmiyorum yanlış anlaşılmasın. Dosyayı lispin içinde açtırıp bir veri alacağım geri kapatacağım
dosyaları tek tek seçmek yerine klasör seçerek bu işlemi tamamlamak istiyorum.
mantık olarak bakıldığında yüzlerce dosya olduğunu düşünürsek kullanıcının bunu tek tek seçmesi mantıklı değil.
umarım kendimi ifade edebilmişimdir Erkan hocam

Aşağıdaki kod ile D klasöründe MEK klasöründe yer alan GRM.TXT dosyasından içindeki istediğim verileri çekebiliyorum
fakat ismi farklı olan onlarca belki yüzlerce txt uzantılı dosyalarım var, ona nasıl bir kod yazacağımı bulamadım

Kod:

(setq bl (open "D:\\MEK\\GRM.txt" "r"))
(if bl
(progn
(setq BLTLIS (append (LIST (LIST "blt"))))
(setq A (read-line bl))
(setq A (read-line bl))

(while A
  (setq BOL1 (vl-string-right-trim " " (substr A 1 30)))
  (setq BOL2 (vl-string-right-trim " " (substr A 31 10)))
  (setq BOL3 (vl-string-right-trim " " (substr A 50 10)))
  (setq BOL4 (vl-string-right-trim " " (substr A 71 10)))
  (setq BOL5 (vl-string-right-trim " " (substr A 91 10)))
   (setq BLTLIS (append (list (list BOL1 BOL2 BOL3 BOL4 BOL5)) BLTLIS))
   (setq A (read-line bl))
  )
     )
  (alert "DOSYA D:\\MEK\\GRM.txt KONUMUNDA BULUNAMADI")
     )
  (setq BLTLIS (reverse BLTLIS))
(close bl)

BLack|E (24.04.2021 07:57 GMT)

24.04.2021 17:56    

Travaci
Kod:

(foreach x (vl-directory-files "c:/Lisplerim" "*.lsp" 1) (print x))

Bu şekilde listeye alıp listedekilere istediğin işlemleri yapabilirsin.

Kod:

(vl-directory-files "c:/MEK" "*.txt" 1)

27.04.2021 20:14    

BLack|E
Teşekkür ederim Travaci Hocam.
Beni şaşırtan şu oldu foreach 'ın sayac gibi davranıp listedekileri tek tek işlem yaptığını bilmiyordum.
Kod:

vl-directory-files
ise uzun zamandır aradığım bir özellikti.

03.05.2021 19:27    

sekaraman
Herkese Selamlar. Bir konuda yardıma ihtiyacım var.
Kanalizasyon lisp yaparken baslangıc ile bitis noktasına line ciziyorum. Hatta başlangıc noktasına daire atıyorum.
ama daire yerine Kare şeklinde blok attığım zaman açı otomatik olarak 0 geliyor. Bu rogar açısını kanal çizerken kanal açısına uygun olarak nasıl yerleştirebilirim?

(command "LAYER" "M" "BACA" "")
(command "insert" "BACA" uc1 1.0 1.0 "" )
(setq aci10 (angle UC1 uc2))
(setq pucilk (polar UC1 aci10 0.40))
(setq puc (polar uc2 aci10 -1.4625))

(command "LAYER" "M" "HATINCE" "")
(if (and (>= mesafe 0.50) (/= mesafe nil))
(command "LINE" ucilk uc "")
)

(command "LAYER" "M" "HAT" "")
(if (and (>= mesafe 0.50) (/= mesafe nil))
(command "LINE" pucilk puc "")
) ;kanallar çizildi

Şimdiden çok teşekkür ederim

16.12.2021 08:22    

BLack|E
Herkese merhaba;
daha önce AutoCAD ortamında çalışan lisp
iş yerinin program değişikliğine gidilmesi sebebiyle (BricsCAD) aşağıda belirteceğim
sıkıntı ile karşı karşıya kalmaktayım.
"Seçilen text ve mtext'leri seçilen çizginin açısına göre çeviren lisp"
Bu lisp artık (BricsCAD'te) text'lerde işlevini yitirmiştir.
Hangi kod satırı güncellememiz gerekecek yardımcı olursanız sevinirim.
Kod:

(defun rt_hata (s)
  (if (/= s "Function cancelled")
    (princ (strcat "
Error: " s))
  )
  (setq *error* olderr)               
(princ))
(defun rt_uygula ()
  (setq rt_sec_say (sslength rt_sec))
  (setq c 0)
  (while (> rt_sec_say c)
    (setq e_rt_sec (ssname rt_sec c))
    (setq ee_rt_sec (entget e_rt_sec))
    (setq ee_rt_sec (append ee_rt_sec (list (cons 50 secim_aci))))
    (entmod ee_rt_sec)
    (setq c (+ c 1))
    (setq rt_e t)
  )
)
(defun c:rty ()
(setq olderr *error*
      *error* rt_hata)
  (setq
    rt_sec (ssget
     '((-4 . "<OR") (0 . "TEXT,MTEXT) (-4 . "OR>"))
   )
  )
  (if (= rt_sec nil)
    (progn
      (princ)
    )
    (progn
      (setq rt_e nil)
      (setvar "errno" 0)
      (while (= rt_e nil)
(setq rt_ent (entsel "
Referans nesneyi seçiniz:"))
(if (= rt_ent nil)
  (progn
    (if (= (getvar "errno") 7)
      (progn
(setq rt_e nil)
(setvar "errno" 0)
      )
    )
    (if (= (getvar "errno") 52)
      (progn (setq rt_e t) (setvar "errno" 0))
    )
  )
  (progn
    (command "select" rt_sec "")
    (setq rt_ent_tan (cdr (assoc 0 (entget (car rt_ent)))))
    (if (and (/= rt_ent_tan "LINE")
     (/= rt_ent_tan "XLINE")
     (/= rt_ent_tan "RAY")
     (/= rt_ent_tan "TEXT")
(/= rt_ent_tan "MTEXT")
)
      (progn
(princ
  "
Bu komut seçtiginiz nesne türü için geçerli degildir..."
)
(setq rt_e t)
      )
    )
    (if (or (= rt_ent_tan "TEXT")(= rt_ent_tan "MTEXT"))
      (progn
(setq secim_aci (cdr (assoc 50 (entget (car rt_ent)))))
(rt_uygula)
      )
    )
    (if (or (= rt_ent_tan "LINE")
    (= rt_ent_tan "XLINE")
    (= rt_ent_tan "RAY")
)
      (progn
(setq secim_bas (cdr (assoc 10 (entget (car rt_ent))))
      secim_son (cdr (assoc 11 (entget (car rt_ent))))
)
(setq secim_aci (angle secim_bas secim_son))
(if (and (> secim_aci (angtof "0.0000"))
(< secim_aci (angtof "90.0000"))
    )
  (setq secim_aci secim_aci)
)
(if (and (> secim_aci (angtof "91.0000"))
(< secim_aci (angtof "180.0000"))
    )
  (setq secim_aci (+ secim_aci (angtof "180.0000")))
)
(if (and (> secim_aci (angtof "181.0000"))
(< secim_aci (angtof "270.0000"))
    )
  (setq secim_aci (+ secim_aci (angtof "180.0000")))
)
(if (and (> secim_aci (angtof "271.0000"))
(< secim_aci (angtof "360.0000"))
    )
  (setq secim_aci secim_aci)
)
(rt_uygula)
(setq rt_e t)
      )
    )
  )
)
      )
    )
  )
  (princ)
)
(princ)

18.12.2021 03:29    

ProhibiT
Visual Lisp Editor ile bakar bakmaz hata görünüyor.
'((-4 . "<OR") (0 . "TEXT,MTEXT) (-4 . "OR>")) satırında tırnak işareti açık (eksik) kalmış.
'((-4 . "<OR") (0 . "TEXT,MTEXT") (-4 . "OR>")) şeklinde düzeltilince çalışacaktır.

Bu basit hatayı bulunca bir şey dikkatimi çekti. Bu satırda OR (veya) demeye gerek yok ki! Veya şeklinde bir kıyaslama yapabilmek için birden çok parametre gerekir halbuki bizde bir tane "TEXT,MTEXT". Bu durumda ilgili satırımız,
'(0 . "TEXT,MTEXT) şeklinde yazılsa yerli olur, derken... başka şeyler dikkatimi çekti.
Kod:

(if (= rt_sec nil)
    (progn
      (princ)
    )
    (progn
      (setq rt_e nil)
      .
      .

şeklindeki ifadede soruyu sorarken olumsuz sorsak ta,
(if (= rt_sec nil) yerine (if (/= rt_sec nil) yazsak... hatta (if rt_sec yazarak ifademizi değiştirerek doğrudan hedefe yönelsek, rt_sec'in değerinin nil olması durumunu (progn (princ)) gibi boş, kukla satırlar yazmadan... benden ırak cehenneme direk diyerek baştan elsek daha doğru olmaz mı?.. İşin gerçeği, bu tarz çalışma mantığı hiç yabancı gelmedi bana.

Bu kadar konuya girince başka şeyler de dikkatimi çekti, algoritmada da bazı aksaklıklar var. Zaten kodlar taksit taksit konunun canını çıkarırken, birde oradan oraya (AutoCAD'den başka ortamlara) taşınan kodlar epeyce yorulmuşlar. Belli ki bunu ilk yazan değerli dostumuz da bu amaçla yazmamış, zaman içinde yamalı bohçaya dönmüş. Bu fonksiyon bu haliyle referans olarak XLINE nesnesi seçilince çalışmaz. LINE nesnelerinde (assoc 10 başlangıç noktası ve (assoc 11 bitim noktasıyken, XLINE nesnesinde (assoc 10 tanım noktası, (assoc 11 ise doğrultu vektörüdür... yani, bu yolla XLINE nesnesinin açısı bulunamaz.

Algoritmada bazı aksaklılar demiştim... hata (error) fonksiyonunun böyle kullanılması her an belirsiz durumların ortaya çıkmasına neden olabilir.

Bunca laf kalabalığının özeti, isterseniz en başta söylediğim tırnak işaretini ekleyerek aksaklığı giderip, nasılsa işimi görüyor, diyerek devam edebilirsiniz. İsterseniz de...
Kod:

(defun c:rty (/ *error* sec ref aci snes)
  (setq ocmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "_.undo" "group")
  (defun *error* (er)
    (if (member er '("Function cancelled" "quit / exit abort"))
      (princ (strcat "\n\t*error*" er)))
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (prin1))
  (princ "\nİşlenecek nesneleri seçiniz.")
  (while (not (setq sec (ssget (list (cons 0 "TEXT,MTEXT")))))
    (princ "\nSeçilen nesneler TEXT veya MTEXT olmalıdır."))
  (princ "\nReferans nesne (LINE, XLINE, TEXT, MTEXT veya RAY) seçiniz.")
  (while
    (not (setq ref (ssget ":s" (list (cons 0 "LINE,XLINE,TEXT,MTEXT,RAY")))))
    (princ "\nUygun Referans Nesne seçiniz.")) (setq ref (ssname ref 0))
  (if (or (= (cdr (assoc 0 (entget ref))) "TEXT")
          (= (cdr (assoc 0 (entget ref))) "MTEXT"))
    (setq aci (cdr (assoc 50 (entget ref))))
    (if (= (cdr (assoc 0 (entget ref))) "LINE")
      (setq aci (angle (cdr (assoc 10 (entget ref)))
                             (cdr (assoc 11 (entget ref)))))
      (setq aci (atan (/ (caddr (assoc 11 (entget ref)))
                               (cadr (assoc 11 (entget ref))))))))
  (if (and (> aci (/ pi 2)) (<= (* 1.5 pi)))
    (setq aci (+ pi aci)))
  (if (> aci (* 2 pi)) (setq aci (- aci pi))) (setq n -1)
  (while (setq snes (ssname sec (setq n (1+ n))))
    (setq snes (subst (cons 50 aci) (assoc 50 (entget snes))
                          (entget snes))
          snes (cdr (assoc -1 (entmod snes)))))
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if ocmd (setvar "cmdecho" ocmd)) (prin1))

fonksiyonunu kullanabilirsiniz. "Hah tamam bu da işimi görüyor" da diyebilirsiniz. Ama işin aslını faslını biraz merak eden (merak etmesi gereken) arkadaşlarımız, kös dinlemeyip, anlatılanlara biraz kulak assalar fena olmaz doğrusu.

Bazı paylaşımlarımda açık kaynak kod vermediğim için bana sitem eden, kırgınlıklarını ifade eden arkadaşlarımıza bir kere daha hatırlatmak isterim ki, işte açık kod... işin bu kısmını çözüp hazmetmemiş arkadaşlarımıza daha karmaşık konularda açık kod vermenin bir sanat değeri olmadığına inanıyorum hala.

Herkese kolaylıklar dilerim.

20.12.2021 07:52    

BLack|E
Teşekkür ederim hocam verdiğiniz bu güzel bilgiler için... Saygılar.

06.06.2022 05:37    

LEYLO
İyi günler,
Rusça panel isimlerini Export Attribute information komutu ile excele veri aktardığımda "u/0429" gibi unicode karşılıkları yazılıyor. Tüm kod karşılıklarını rusça karaktere çeviren autolisp var mı?

14.06.2022 14:16    

kasim78
Exception occurred: 0xC0000005 (Access Violation) hatası alıyorum. Lisp yazılım ile çalışan programım çalışmaz oldu...Programı kaldırıp kurdum, hatta Autocad'i kaldırıp kurdum, faydalı olmadı. Autocadv 2022 kullanıyorum... Versiyondan kaynaklanıyo olabilir mi?? Bu konuda yardımcı olabilir misiniz? Şimdiden çok teşekkürler

kasim78 (16.06.2022 11:18 GMT)

14.06.2022 16:36    

mttlp
Alıntı
kasim78 :
Exception occurred: 0xC0000005 (Access Violation) hatası alıyorum. Lisp yazılım ile çalışan programım çalışmaz oldu...Programı kaldırıp kurdum, hatta Autocad'i kaldırıp kurdum, faydalı olmadı. Autocadv 2022 kullanıyorum... Versiyondan kaynaklanıyo olabilir mi?? Bu konuda yardımcı olabilir misiniz? Şimdiden çok teşekkürler



Merhaba yapmış olduğum çeviri programı mevcuttur autocadde
Kullanabilirsiniz istediğiniz dile çevirme seçeneği mevcuttur
mty@mtycad.com

14.06.2022 16:37    

mttlp
Alıntı
kasim78 :
Exception occurred: 0xC0000005 (Access Violation) hatası alıyorum. Lisp yazılım ile çalışan programım çalışmaz oldu...Programı kaldırıp kurdum, hatta Autocad'i kaldırıp kurdum, faydalı olmadı. Autocadv 2022 kullanıyorum... Versiyondan kaynaklanıyo olabilir mi?? Bu konuda yardımcı olabilir misiniz? Şimdiden çok teşekkürler



Excelde acces için versiyonu kontrol ediniz
mty@mtycad.com

05.07.2022 08:16    

thrcr
Arkadaşlar, Autocad için alan lispi lazım. Sitede ve internette arattığımda genellikle tüm alanları topluyor. Ben bunu çıkartmalı olarak yani profil çiziminde et kalınlıklarına göre alan istiyorum. Autocad kendi içerisinde var ama uğraştırıyor. Daha pratik olması açısından. Yazabilecek olan varsa yardımcı olabilir mi?
Şimdiden herkese teşekkür ederim.

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] > 42 <
Copyright © 2004-2022 SQL: 1.118 saniye - Sorgu: 77 - Ortalama: 0.01452 saniye