Anda di halaman 1dari 10

8.

DOSYA KONTROLÜ

8.1. FINDFILE
(findfile filename)

AutoCAD kütüphanesi içerisindeki bir dosyanın yerini bulmak için findfile dosyası kullanılır.
Örneğin;

(findfile "abc.lsp")
"C:\\Program Files\\ACAD2000\\abc.lsp"

(findfile "xyz.txt")
"C:\\Program Files\\ACAD2000\\support\\xyz.txt"

(findfile “abc.lsp”)
“/acad/abc.lsp”

(findfile “xyz.txt”)
“/acad/support/xyz.txt”

(findfile “name”)
nil

8.2. OPEN
( Open <dosya> <mod> )

Bu fonksiyon, <dosya> olarak belirtilmiş dosyalara erişilerek belirtilen <mod>‟lar


doğrultusunda bu dosyalarla çalışılmasını sağlar. Fonksiyonda belirtilebilecek ve “” içinde
küçük harf olarak yazılması zorunlu olan <mod> „lar şunlardır.;

“r” (read) Belirtilen <dosya> sadece okuma amaçlı açılır. Bu dosya içine herhangi bir bilgi
ilave edilemez. Eğer belirtilen isimde bir dosya yoksa fonksiyon sonucu nil olur.

“w” (write) Bu mod ile açılacak <dosya> yazma amaçlı olarak açılır. Eğer <dosya > mevcut
değilse önce, dosya oluşturulur ve sedece yazma amaçlı olarak açılır. Aksi durumda, yani
belirtilen isimde bir dosya varsa bu dosyanın üzerine yazılacağından mevcut dosyadaki eski
bilgiler silinir.

“a” (append) Bu mod ekleme modudur. Yani <dosya> olarak belirtilmiş dosya bilgi eklemek
için açılır. Eğer belirtilmiş olan isimde bir dosya mevcut değilse önce dosya oluşturulur. Daha
sonra ekleme modunda açılır. Belirtilen <dosya> mevcut ise o takdirde mevcut dosyanın
sonundan itibaren yeni girişler kabul edilir.

<dosya>, directory adresini içerecek şekilde de yazılabilir.


(setq ad (open “c:/sample/kare.dat” “r”))

Geçerli olan bir dosyanın açılması


(setq a (open "c:/program files/acad2000/help/filelist.txt" "r"))
#<file "c:/program files/acad2000/help/filelist.txt">
(setq f (open "c:\\my documents\\new.tst" "w"))
#<file "c:\\my documents\\new.tst">

(setq f (open "nosuch.fil" "r"))


nil

(setq f (open "logfile" "a"))


#<file "logfile">

8.3. READ-LINE

Bu fonksiyonun en temel işlevi bir yazı dosyasından bilgi okumaktır. Read-line fonksiyonu
iki şekilde çalışmaktadır. Birincisi bir yazı dosyası ile desteklenen okuma işlemi
gerçekleştirilir. Eğer bir dosya tanımlayıcı yoksa fonksiyon dizgiyi klavyeden okur. Aksi
takdirde fonksiyon dosyası olarak tanımlanan ilk dosyadan okuma başlayacaktır. Read-line
dosyanın ilk satırı ile işleme başlar. Read-line fonksiyonu kullanılırken yazı dosyasındaki
bilgiler sıralandığı şekilde ard arda okunacaktır. Bu işlem yazı dosyasının sonuna kadar
devam eder ve sonunda nil ile sonuçlanır.

Read-line fonksiyonu kullanılırken satırların okunmasından önce OPEN fonksiyonu


kullanılarak dosya açılmalıdır. İşlem tamamlandıktan sonra (close dosya_ismi) şeklinde dosya
kapatılmalıdır. Aşağıdaki örnekte “data.dat” şeklinde bir dosyadan okuma işlemi
gerçekleştirilmektedir. “data.dat” isimli yazı dosyası herhangi bir yazı editöründe
oluşturulabileceği gibi windows altında notepat (yazı defteri) editörününde de oluşturulabilir.
Dosyanın uzantı ismini kullanıcı belirleyebileceği gibi çokca kullanılan “.dat , .txt vb.” uzantı
seçeneklerini de kullanabilir. Tasarım verilerinin bir dosyada toplanmasının en basit yöntemi
satır satır girilmesi şeklindedir. “data.dat” isimli dosyanın veri girişi aşağıdaki gibi olsun.

5.5
6.2
0.555

“data.dat” isimli yazı dosyasında satır satır verilen bu bilgiler sırasıyla yükseklik, genişlik ve
kalınlık degerlerine karşılık geldiği kabul edilirse dosyadan okutma yapma işleminde de bu
sıranın aynen alınması gerekecektir.

Örnek:

(defun c:oku ()

(setq datf (open "data.dat" "r"))


(setq yukseklik (atof (read-line datf))
genislik (atof (read-line datf))
kalinlik (atof (read-line datf))
ic_yukseklik (- yukseklik (* 2 kalinlik))
ic_genislik (/ (- genislik kalinlik) 2)
)
(close datf)
)
Oluşturulan bu lisp programı öncelikle “data.dat” isimli dosyayı “r” (read only) sadece
okumak üzere açacaktır. Dosyadaki bütün satırları sırasıyla okuyacak ve bu değerlerin
herbirini bir değişkene atayacaktır. Burada program toplam üç satır okumuş ve okuduğu
bilgileri reel sayıya çevirerek değişkenlere atamıştır. Dizgi istenirse (atoi) fonksiyonu
kullanılarak tamsayıya da çevrilebilir.

Oluşturulan veri dosyası bazı tanımlayıcı notlar içeriyor olabilir. Çrneğin

5.5 yükseklik degeri


6.2 genislik
0.555 flaş kalınlığı

Burad (read) fonksiyonu kullanılarakdizginin ilk nesnesinin okunması sağlannabilir.


Dolayısıyla veri dosyasındaki tanımlama yazıları gözardı edilir. Burada (atof) fonksiyonu da
eğer sayılar üstte verildiği gibi önce geliyorlar ise yazı parçasını gözardı edecektir. Bu
işlemler AutoCAD Command satırında aşağıdaki şekilde test edilebilir.

(setq f (open "data.dat" "r"))


<File: #2c4c4>

(setq h1 (read-line f))


"5.5 yükseklik değeri "

(atof h1)
4.5

(read h1)
4.5

(close f)
nil

;”data.dat” dosyasında açıklama satırlarını almaz

(defun c:oku ()

(setq datf (open "data.dat" "r"))


(setq yukseklik (read (atof (read-line datf)))
genislik (atof (read (read-line datf)))
kalinlik (atof (read (read-line datf)))
ic_yukseklik (- yukseklik (* 2 kalinlik))
ic_genislik (/ (- genislik kalinlik) 2)
)
(close datf)
)

8.4. WRITE-LINE

Bu fonksiyon, dosyaya veri yazmak için kullanılan fonksiyondur. Çalışma esnasında tanımlı
bir veri dosyasına program içerisinde bulunmuş olan sonuçlar yazdırılmak istenebilir. Bu
fonksiyon dosya içerisine istenilen bilgileri dizgi şeklinde yazdıran fonksiyondur. Dosyaya
yazım işlemi tamamlandıktan sonra dosya mutlaka close fonksiyo kullanılarak kapatılmalıdır.
Örnek 1

DAT dosyası dökümü (aşağıda verilmiş olan satırlar test.dat ismiyle ayrı bir dosya olarak
kaydedilecektir.)

*6
152.0,10.0,124.0
*7
178.0,12.0,135.0
*8
203.0,14.0,146.0
*9
229.0,16.0,158.0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:Test ()

(setq size
(getstring "\nEnter Size <6, 7, 8 or 9>: ")) ;Ölçüleri gir
(setq dlist nil
size (strcat "*" size) ;ölçüye yıldız karakterini ekle
file (findfile "test.dat") ;veri dosyasını bul
fp (open file "r") ;okumak için dosyayı aç
item (read-line fp) ;dosya için ilk sıranın etiket olmasını sağla
);setq
(while item ;dosyadaki her satır için işlem
(if (= item size) ;değerlerin karşılaştırılması
(setq data (read-line fp) ;satırı oku
item nil ;adet araştırma sonu
);setq
(setq item (read-line fp)) ;item için araştırmanın korunması
);if
);while
(if data ;ölçünün bulunması durumunda
(progn
(setq maxs (strlen data) ;girdi uzunluğunun kurulması
count 1 ;sayaç ilk değeri
chrct 1 ;karakter ilk değeri
);setq
(while (< count maxs) ;tek tek karakterin alınması
(if (/= "," (substr data count 1)) ;virgül aranıyor
(setq chrct (1+ chrct)) ;sıradaki pozisyon için karaker yükseltme
(setq numb (atof
(substr data
(1+ (- count chrct)) chrct)) ;reel sayıya çevrim
dlist (append dlist (list numb)) ;listeye ekleme
chrct 1 ;ct alanını resetle
);setq
);if
(setq count (1+ count)) ;sayacı bir arttır
);while
(setq numb (atof
(substr data
(1+ (- count chrct)))) ;reel sayıya çevir
dlist (append dlist (list numb)) ;listeye ekle
);setq
);progn
);if data
(close fp) ;veri dosyasını kapat
(mapcar 'set '(a b c) dlist) ;değişkenlerin ayrılması
);defun

Örnek 2

Telefon rehberi programı

;****************** TELEFON REHBERİ **********************************

;****************** MENÜ **********************************


(Defun c:rehber ( / soy soyara ad adr tel bilgi syy syyy ssy sec secc byrk)
(setvar "cmdecho" 0)
(Command "erase" "all" "")
(Setq secc 0)
(while (= secc 0)
(COMMAND "COLOR" "1")
(Command "text" "7,10" "1" "0" " M E N U")
(Command "color" "5")
(Command "text" "7,8" "0.8" "0" " 1 - Kayit")
(Command "text" "7,7" "0.8" "0" " 2 - Arama")
(Command "text" "7,6" "0.8" "0" " 3 -Düzeltme")
(Command "text" "7,5" "0.8" "0" " 4 -Çıkış")
(Command "color" "3")
(Command "text" "5,3" "0.8" "0" "S e ç i m i n i z")
(Command "redraw")
(Setq sec (getint " "))
(if (and (< sec 5) (> sec 0)) (Setq secc 1) (Setq secc 0 ))
(if (= secc 0 ) (alert "1 ile 3 arasında seçim yapınız"))
)

;***************** KAYIT BÖLÜMÜ **************************************

(if (= sec 1)
(progn
(Command "erase" "all" "")
(Command "color" "1")
(Command "text" "7,10" "1" "0" " K A Y I T")
(Command "color" "5")
(Command "text" "7,8" "0.8" "0" "Adi : ")
(Command "redraw")
(Setq ad (getstring ""))
(Command "color" "6")
(Command "text" "14,8" "0.7" "0" ad)
(Command "color" "5")
(Command "text" "7,7" "0.8" "0" "Soyadi : ")
(Command "redraw")
(Setq soy (getstring ""))
(Command "color" "6")
(Command "text" "14,7" "0.7" "0" soy)
(Command "color" "5")
(Command "text" "7,6" "0.8" "0" "Telefonu:")
(Command "redraw")
(Setq tel (getstring 0 ""))
(Command "color" "6")
(Command "text" "14,6" "0.7" "0" tel)
(Command "color" "5")
(Command "text" "7,5" "0.8" "0" "Adresi : ")
(Command "redraw")
(Setq adr (getstring 0 ""))
(Command "color" "6")
(Command "text" "14,5" "0.4" "0" adr)
(setq bilgi (strcat soy "#" ad "#" tel "#" adr "#"))
(Setq bilgi (strcase bilgi))
(Setq veri (open "rehber.dat" "a"))
(Write-line bilgi veri)
(close veri)
)
)
;*********************** ARAMA BÖLÜMÜ *******************************

(if (= sec 2)
(progn
(Command "erase" "all" "")
(Command "color" "1")
(Command "text" "7,10" "1" "0" " A R A M A ")
(Command "color" "5")
(Command "text" "1,8" "0.5" "0" "Aradığınız kişinin soyadı: ")
(Command "redraw")
(Setq soyara (getstring ""))
(Setq soyara (strcase soyara))
(Command "color" "6")
(Command "text" "12,8" "0.6" "0" soyara)
(Setq uz (strlen soyara))
(Setq soy nil)
(Setq bilgi "?")
(Setq veri (open "rehber.dat" "r"))
(while (and (/= soyara soy) (/= bilgi nil))
(setq bilgi (read-line veri))
(if (/= bilgi nil)(Setq soy (Substr bilgi 1 uz)))
(if (= soyara soy) (Setq byrk 1) (Setq byrk 0))
)
(if (= byrk 1)
(progn
(Command "erase" "all" "")
(Command "redraw")
(alert "Bulundu!")
(Setq tek nil)
(Setq syy (+ uz 1))
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq tek (Substr bilgi syy 1))
)
(setq ad (Substr bilgi (+ uz 2) (- syy (+ uz 2))))
(Setq ssy (+ syy 1))
(Setq tek nil)
(Setq syyy 0)
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq syyy (+ syyy 1))
(Setq tek (Substr bilgi syy 1))
)
(Setq tel (Substr bilgi ssy (- syyy 1)))
(Setq sssy (+ syy 1))
(Setq tek nil)
(Setq syyy 0)
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq syyy (+ syyy 1))
(Setq tek (Substr bilgi syy 1))
)
(Setq adr (Substr bilgi sssy (- syyy 1)))
(Command "color" "5")
(Command "text" "7,8" "0.8" "0" "Adi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,8" "0.7" "0" ad)
(Command "color" "5")
(Command "text" "7,7" "0.8" "0" "Soyadi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,7" "0.7" "0" soy)
(Command "color" "5")
(Command "text" "7,6" "0.8" "0" "Telefonu:")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,6" "0.7" "0" tel)
(Command "color" "5")
(Command "text" "7,5" "0.8" "0" "Adresi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,5" "0.4" "0" adr)
)

(progn
(Command "erase" "all" "")
(Command "redraw")
(alert "Girdiğiniz Soyisimde bir kayıt Yok!")
)
)
(close veri)
)
)
;*********************** DÜZELTME BÖLÜMÜ
*******************************

(if (= sec 3)
(progn
(Command "erase" "all" "")
(Command "color" "1")
(Command "text" "7,10" "1" "0" " D Ü Z E L T M E ")
(Command "color" "5")
(Command "text" "1,8" "0.5" "0" "Düzelteceğiniz kaydın soyadı: ")
(Command "redraw")
(Setq soyara (getstring ""))
(Setq soyara (strcase soyara))
(Command "color" "6")
(Command "text" "12,8" "0.6" "0" soyara)
(Setq uz (strlen soyara))
(Setq soy nil)
(Setq bilgi "?")
(Setq veri (open "rehber.dat" "r"))
(while (and (/= soyara soy) (/= bilgi nil))
(setq bilgi (read-line veri))
(if (/= bilgi nil)(Setq soy (Substr bilgi 1 uz)))
(if (= soyara soy) (Setq byrk 1) (Setq byrk 0))
)
(if (= byrk 1)
(progn
(Command "erase" "all" "")
(Command "redraw")
(alert "Bulundu!")
(Setq tek nil)
(Setq syy (+ uz 1))
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq tek (Substr bilgi syy 1))
)
(setq ad (Substr bilgi (+ uz 2) (- syy (+ uz 2))))
(Setq ssy (+ syy 1))
(Setq tek nil)
(Setq syyy 0)
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq syyy (+ syyy 1))
(Setq tek (Substr bilgi syy 1))
)
(Setq tel (Substr bilgi ssy (- syyy 1)))
(Setq sssy (+ syy 1))
(Setq tek nil)
(Setq syyy 0)
(While (/= tek "#")
(Setq syy (+ syy 1))
(Setq syyy (+ syyy 1))
(Setq tek (Substr bilgi syy 1))
)
(Setq adr (Substr bilgi sssy (- syyy 1)))
(Command "color" "5")
(Command "text" "7,8" "0.8" "0" "Adi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,8" "0.7" "0" ad)
(Command "color" "5")
(Command "text" "7,7" "0.8" "0" "Soyadi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,7" "0.7" "0" soy)
(Command "color" "5")
(Command "text" "7,6" "0.8" "0" "Telefonu:")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,6" "0.7" "0" tel)
(Command "color" "5")
(Command "text" "7,5" "0.8" "0" "Adresi : ")
(Command "redraw")
(Command "color" "6")
(Command "text" "14,5" "0.4" "0" adr)

(progn
(Command "erase" "all" "")
(Command "redraw")
(alert "Girdiğiniz Soyisimde bir kayıt Yok!")
)
)
(close veri)
)
)

(setvar "cmdecho" 1)
(Terpri)
)
8.5. READ-CHAR

Açık dosyadan veya klavye girdilerinden elde edilmiş olan karakterlerin ASCII kodlarını
verir.

Örnek

Aşağıda verilmiş olan örnek dosya tanımlamasını içermemektedir. Dolayısıyla klavyeden


girilecek karakterler data olarak kullanılır.

(read-char)

Klavye girişi şu anda boş read-char kullanıcı girdisini bekler

Kullanıcı aşağıdaki karakterleri girmiş olsun

ABC
65

Read-char ilk karakter olarak girilen (A)‟ nın ASCII kodunu gösterir (65). Sonrasında
kullanılacak olan read-char fonksiyonuda (B) ve (C) karakterlerinin ASCII karakterlerini
sırasıyla görüntüleyecektir.

(read-char)
66

(read-char)
67

(read-char)
10

8.6. WRITE-CHAR

Ekrana veya açılan bir dosyaya bir karakter yazar

Örnek

(write-char 67)
C67

(write-char 67 f)
67

Anda mungkin juga menyukai

  • AutoLISP 5
    AutoLISP 5
    Dokumen8 halaman
    AutoLISP 5
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 9
    AutoLISP 9
    Dokumen43 halaman
    AutoLISP 9
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 4
    AutoLISP 4
    Dokumen36 halaman
    AutoLISP 4
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 2
    AutoLISP 2
    Dokumen9 halaman
    AutoLISP 2
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 3
    AutoLISP 3
    Dokumen11 halaman
    AutoLISP 3
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 7
    AutoLISP 7
    Dokumen13 halaman
    AutoLISP 7
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 6
    AutoLISP 6
    Dokumen6 halaman
    AutoLISP 6
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 1
    AutoLISP 1
    Dokumen21 halaman
    AutoLISP 1
    Anonymous 3iUCKdq
    Belum ada peringkat
  • AutoLISP 1
    AutoLISP 1
    Dokumen21 halaman
    AutoLISP 1
    Anonymous 3iUCKdq
    Belum ada peringkat