Grafikus tervezőrendszerek programozása 8. előadás Sztring kezelés 1. • Sztringek fontos szerepet játszanak • Szinte minden adat konvertálható sztring formátumba • Nagybetű, kisbetű konverzió (strcase sztring [melyik]) –

Download Report

Transcript Grafikus tervezőrendszerek programozása 8. előadás Sztring kezelés 1. • Sztringek fontos szerepet játszanak • Szinte minden adat konvertálható sztring formátumba • Nagybetű, kisbetű konverzió (strcase sztring [melyik]) –

Grafikus tervezőrendszerek
programozása
8. előadás
Sztring kezelés 1.
• Sztringek fontos szerepet játszanak
• Szinte minden adat konvertálható sztring
formátumba
• Nagybetű, kisbetű konverzió
(strcase sztring [melyik])
– Példa:
(strcase ”SzTriNG”)
-> SZTRING
(strcase ”SzTriNG” nil) -> SZTRING
(strcase ”SzTriNG” t)
-> sztring
Sztring kezelés 2.
• Sztringek hossza:
(strlen sztring)
– Példa:
(strlen ”Hossz”)
(strlen ””)
->
->
5
0
• Sztringek összefűzése:
(strcat sz1 sz2 sz3 ...)
– Példa:
(strcat ”Szt” ”rin” ”g”) -> ”Sztring”
(strcat ”Sztri” ”” ”ng”) -> ”Sztring”
Sztring kezelés 3.
• Részsztringek készítése:
(substr sztring kezdet [hossz])
– Példa:
(substr ”sztring” 2)
(substr ”sztring” 2 2)
(substr ”sztring” 4 4)
->
->
->
”ztring”
”zt”
”ring”
Példa
(defun str-list (str / ls i)
(setq i 1)
(repeat (strlen str)
(setq ls (cons (substr str i 1) ls)
i (1+ i)
)
)
(reverse ls)
)
(str-list "ring") -> ("r" "i" "n" "g")
File megnyitás
• File megnyitása:
(open file-név mód)
• File leírót ad vissza vagy nil
• A mód lehet
– ”r” olvasáshoz
– ”w” íráshoz
• Példa:
(setq fp (open ”c:/work/t.dat” ”r”))
File lezárása
• File lezárása:
(close file-leíró)
• nil-t
add vissza
• A file leíró értéke változatlan de értéke
használhatatlan
Példa
(defun hello-file ( / fp )
(setq fp (open ”c:/hello.dat” ”w”))
(if fp
(progn
(princ ”Hello World!\n” fp)
(close fp)
)
)
nil
)
Input
• Egy karakter beolvasása
(read-char [file-leíró])
• Egy sor beolvasása
(read-line [file-leíró])
• File vége esetén mindkét függvény nil-t ad
vissza
• Ha file leíró nincs megadva akkor a
billentyűzetről vár inputot
Output
• Egy karakter kiírása
(write-char szám [file-leíró])
a szám az ASCII kód
• Egy sor kiírása
(write-line szöveg [file-leíró])
• Egyéb output függvények
princ, print, prin1, terpri
findfile
• File keresése az AutoCAD által megadott
könyvtárakban
(findfile ”dcg.lsp”) ->
”C:\\peter\\dcg\\dcg.lsp”
(findfile ”pp.rr”)
-> nil
getfiled
• File név bekérése a felhasználótól dialógus
ablakkal
(getfiled title default ext flags)
– title : a dialógus ablak neve
– default : a kezdő file, directory neve
– ext : a keresett file-ok kiterjesztése
– flags
• 1 – új file létrehozására rákérdezzen
• 4 – tetszőleges file kiterjesztést engedélyez
• ...
Példa
Kiértékelő függvény
• Az eval függvény kiértékeli az argumentum
kifejezést és az eredménnyel tér vissza
• Az eval függvény az AutoLisp interpreter lelke !
• Példa:
(setq
(setq
(eval
(eval
(eval
x ”tt”)
y ‘(strcat ”a” ”z”))
x)
y)
9.0)
->
->
->
”tt”
”az”
9.0
apply függvény
• (apply függvény lista)
• Az első argumentumban megadott függvény-t
végrehajtja a listában megadott argumentumokkal
• A függvény a szükséges számú argumentumot
veszi a listából
• Példa:
(apply ’* ’(6 2 3))
(apply ’strcat ’(”s” ”o” ”r”))
(apply ’setq ’(a 5 b 2))
->
->
->
36
”sor”
2
mapcar függvény
• (mapcar függvény lista1 lista2 ...)
• Az első argumentumban megadott függvény-t
végrehajtja a listák elemeire és visszaadja az
eredmény listát!
• Annyi listát kell megadni ahány argumentum kell
a függvénynek!
• Példa:
(mapcar ‘atoi ‘(”11” ”23”))
(mapcar ‘+ ‘(1 2 3) ‘(4 5 6))
-> (11 23)
-> (5 7 9)
mapcar példa
• Több sztring argumentum esetén
(princ (strcat ”hello” ”World”))
• Változó számú argumentum
(defun my-princ (x)
(if (listp x)
(mapcar 'princ x)
(princ x)
)
)
• Használat
(my-princ (list ”\nKezdo pont:” p1
”\nVegpont:”
p2) )
lambda „függvény”
• „Ismeretlen” vagy „munka függvény” is
definiálható
• Akkor használjuk ha nem akarunk külön
függvényt definiálni
• Például a programozói akaratot ez a forma
jobban kifejezi
(lambda argumentumok kifejezések ...)
Példa
1. Változat
(defun test (x y) (+ x y))
(mapcar ‘test ‘(1 2 3) ‘(4 5 6)) -> (5 7 9)
2. Változat
(mapcar ‘(lambda (x y) (+ x y))
‘(1 2 3) ‘(4 5 6)
)
-> (5 7 9)
(mapcar ‘(lambda (x) (* x 3))
‘(5 6 7)
)
-> (15 18 21)
read
• (read sztring)
• A függvény visszadja a sztringből az első
atomot vagy listát.
• Példa
(read ”haha”)
(read ”(a)”)
(eval (read ”(+ 2 3)”))
-> haha
-> (a)
-> 5
Plotter példa
(fplot '(lambda (x y) (* (cos x)(cos y)))
10 10 10)
(defun fplot (expr steps xpi ypi /
xn yn zn tlist plist)
(setq plist nil xn 0.0 yn 0.0)
(repeat (* xpi steps)
(setq tlist nil yn 0.0)
(repeat (* ypi steps)
(setq zn ((eval expr) xn yn))
(setq tlist (append tlist
(list (list xn yn zn))))
(setq yn (+ yn (/ pi steps)))
)
(setq plist (append plist (list tlist)))
(setq xn (+ xn (/ pi steps)))
)
(_plot plist)
)
Rajzoló
(defun _plot (l / i j)
(setq i 0)
(command "_3dmesh" (length l)
(length (car l)))
(repeat (length l)
(setq j 0)
(repeat (length (car l))
(command (nth j (nth i l)))
(setq j (1+ j))
)
(setq i (1+ i))
)
)