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> )
“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.
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.
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 ()
(atof h1)
4.5
(read h1)
4.5
(close f)
nil
(defun c:oku ()
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
(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
(read-char)
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
Örnek
(write-char 67)
C67
(write-char 67 f)
67