Documente Academic
Documente Profesional
Documente Cultură
Nicolae Ţăndăreanu
SISTEME EXPERT
Lecţia 4
Baze de date şi spredsheeturi ı̂n Guru
2003-2004
2 N. Ţăndăreanu: Lecţia 4
N. Ţăndăreanu: Lecţia 4 3
1 Obiective
LABELED eticheta
nume-tabel.nume-camp
3 Procesarea tabelelor
USE nume-tabel
USE angajati
FINISH nume-tabel
sau
FINISH ALL
În ultimul caz, sunt extrase din memorie toate tabelele aflate
in use. Comanda BYE ı̂nchide automat tabelele la sfârşitul unei
sesiuni de lucru.
Pentru ı̂ncărcarea ı̂n memorie a unui tabel se mai poate utiliza
comanda de ı̂ncărcare a fişierului ataşat tabelului:
USE "nume-fisier"
10 N. Ţăndăreanu: Lecţia 4
unde pozitie poate avea una din formele prezentate ı̂n Tabelul 2,
Tabelul 3 şi Tabelul 4.
Comanda CREATE crează ı̂nregistrări ı̂ntr-un tabel ı̂n mod
interactiv. Execuţia acestei comenzi conduce la afişarea pe ecran a
informaţiilor pe care le cere programul. Ieşirea din CREATE se re-
alizează acţionând tasta ESC. Pentru utilizarea comenzii CREATE
este necesar să fie ı̂ndeplinite următoarele condiţii:
1. Numele de tabel trebuie să existe, adică să apară ı̂n DE-
FINE.
De exemplu, comanda:
Record Number: 1
Nume: Ionescu
Stabil: true
Varsta: 25
Nroreluc: 200
Salbrut:1000000
BROWSE
Forma ei este:
CURRENT
ALL
NEXT
NEXT num
PRIOR
PRIOR num
RANGE num1, num2
• FOR conditii arată că dorim să vizualizăm numai acele ı̂nre-
gistrări din scop care ı̂ndeplinesc condiţiile specificate.
angajati.stabil=true
Efectul pe monitor:
Record Number: 1
UNU: __________
DOI: __
Record Number: 1
UNU: UNU
DOI: 1
Record Number: 2
UNU: DOI
DOI: 2
Record Number: 3
UNU: __________
DOI: __
Guru>
20 N. Ţăndăreanu: Lecţia 4
Guru>browse
Efectul pe monitor:
Record Number: 1
UNU: UNU
DOI: 1
Record Number: 2
UNU: DOI
DOI: 2
Guru>
Introducem comanda:
Pe monitor apare:
Record Number: 3
UNU: __________
DOI: __
N. Ţăndăreanu: Lecţia 4 21
Record Number: 3
UNU: TREIA
DOI: 31
Record Number: 4
UNU: PATRUA
DOI: 41
Record Number: 5
UNU: __________
DOI: __
Acţionăm tasta ESC, prin care ı̂ncheiem această etapă şi obţinem
prompterul Guru:
Guru>
Guru>browse
Efectul pe monitor:
22 N. Ţăndăreanu: Lecţia 4
Record Number: 1
UNU: UNU
DOI: 1
Record Number: 2
UNU: DOI
DOI: 2
Record Number: 3
UNU: TREIA
DOI: 31
Record Number: 4
UNU: PATRUA
DOI: 41
Guru>
Introducem comanda:
Efectul pe monitor:
Record Number: 2
UNU: __________
DOI: __
N. Ţăndăreanu: Lecţia 4 23
Record Number: 2
UNU: ANA
DOI: 1
Record Number: 3
UNU: PETRE
DOI: 2
Record Number: 4
UNU: SORIN
DOI: 4
Record Number: 5
UNU: __________
DOI: __
Guru>
Guru>browse
Efectul pe monitor:
Record Number: 1
UNU: UNU
DOI: 1
Record Number: 2
UNU: ANA
DOI: 1
Record Number: 3
UNU: PETRE
DOI: 2
Record Number: 4
UNU: SORIN
DOI: 4
Record Number: 5
UNU: DOI
DOI: 2
Record Number: 6
UNU: TREIA
DOI: 31
N. Ţăndăreanu: Lecţia 4 25
Record Number: 7
UNU: PATRUA
DOI: 41
Guru>
• În directorul ı̂n care lucrăm constatăm că există fişierul tab.itb
şi nu există nici un fişier cu numele tabel1.itb.
Să presupunem că ı̂n acelaşi director avem următorul pro-
gram, definire1.ipf:
DEFINE tabel1;
26 N. Ţăndăreanu: Lecţia 4
La comanda:
Guru>perform definire1
Record Number: 2
UNU: ANA
DOI: 1
Record Number: 3
UNU: PETRE
DOI: 2
Record Number: 4
UNU: SORIN
DOI: 4
Guru>
OBTAIN pozitie
OBTAIN pozitie RECORD FROM nume_tabel
OBTAIN pozitie RECORD FROM nume_tabel FOR conditii
unde pozitie poate avea una din valorile specificate ı̂n Tabelul 7
şi Tabelul 8.
De exemplu, comanda:
28 N. Ţăndăreanu: Lecţia 4
De exemplu, atribuirea
angajati.nroreluc:=10
SORT
trărilor
DEFINE angajati
field nume str 10 using "%10a" labeled "Nume angajat"
field stabil logic labeled "Contract de munca cu\
perioda nedeterminata - true"
field vechime int using "%2n"
field nroreluc num using "nnn.nn"\
labeled "Numarul de ore lucrate"
field tarif num using "nnnnn"
field salbrut =nroreluc*tarif labeled\
"Salariul brut, camp virtual"
ENDDEF
De exemplu, instrucţiunea
COMPRESS nume_tabel
COMPRESS angajati
N. Ţăndăreanu: Lecţia 4 37
UNMARK
UNMARK
UNMARK scop
UNMARK IN nume_tabel scop
UNMARK IN nume_tabel FOR conditii scop
UNMARK IN nume_tabel WHILE conditii scop
DEFAULT nume_tabel
DEFAULT IS nume_tabel
lor.
unde:
fname STR 10
lname STR 10
limba STR 10
l1 NUM (dd.dd)
l2 NUM (dd.dd)
N. Ţăndăreanu: Lecţia 4 43
• forma viz diferă de forma trans numai prin faptul că ı̂n ea
apar valorile virtuale din tabelul vizualizat;
48 N. Ţăndăreanu: Lecţia 4
6 Regăsirea informaţiilor
Informaţiile conţinute ı̂n unul sau mai multe tabele pot fi afişate
pe ecran sau la imprimantă sub diferite forme. Pentru a obţine
forma dorită, progra- matorul trebuie să definească un model de
raport. Modelul raportului se poate defini:
Legătura dintre modelul unui raport şi datele din tabele se real-
izează cu ajutorul comenzii REPORT. Rutarea rezultatelor obţinute
prin comanda REPORT este controlată de următoarele variabile de
mediu, care se setează cu TRUE sau FALSE:
• paternuri de detaliu;
• paternuri de headere;
• paternuri de subsoluri.
Header de raport
Detaliu
Subsol de raport
30,30 >=A1
||
:A :B :C :D :E :F :G :H
1
2
3
4
19
Figura 1: spredsheet
• linia de comandă;
• linia imagine.
Linia de comandă şi linia imagine sunt ultimele două linii ale
spredsheetului. În Figura 1 linia de comandă este desenată prin lin-
ie punctată. Ea este inactivă. Activarea ei se obţine acţionând tasta
ESC. De ı̂ndată ce linia de comandă a fost activată, ea aşteaptă in-
troducerea unei entităţi. Entitatea introdusă poate fi:
• o comandă.
Unei celule putem să ı̂i ataşăm un text program; ı̂n acest caz
valoarea atribuită celulei active este valoarea ultimei variabile din
textul program căreia nu i se asignează nici o valoare. De exem-
plu să presupunem că introducem valorile 1,2,3 respectiv ı̂n #A1,
#A2, respectiv #A3. Aceste atribuiri se obţin dacă pentru fiecare din
variabilele celulă enunţate realizăm următoarele operaţiuni:
În continuare să presupunem că celula activă este #A4. Activăm
linia de comandă şi introducem textul program de mai jos:
ENDIF
X;
\COMPUTE
• Introducem comanda:
N. Ţăndăreanu: Lecţia 4 69
sum(cela,celb)
LOAD nume
CALC
\USE SAL
\E.DECI:=0
CELL #B6
FOR conditii
• Comanda:
crează ı̂ntr-un tabel noi ı̂nregistrări care constau din valori ale
unor celule din spredsheet.
PERFORM nume_fisier
DEFINE proba;\
FIELD nume1 INT using "ddd";\
N. Ţăndăreanu: Lecţia 4 73
NUME
PRENUME
Tarif/zi
SALARIU REALIZAT
Nume birou
unde INDEX poate fi 1,2 sau 3. Cı̂mp1 şi Cı̂mp2 sunt de tip nu-
meric.
Se cer următoarele:
N. Ţăndăreanu: Lecţia 4 77
Cimp1 + Cimp2 daca IN DEX = 1
Cimp1 − Cimp2 daca IN DEX = 2 (1)
Cimp1 ∗ 3/4 + Cimp2 ∗ 1/4 daca IN DEX = 3
• Introduceţi ı̂nregistrări ı̂n cele două tabele astfel ı̂ncât ele să
aibă ı̂nregistrări comune.
Introduceţi ı̂nregistrări ı̂n cele două tabele astfel ı̂ncât ele să aibă
ı̂nregistrări comune. Obţineţi tabelul dif care să conţină ı̂nregistrările
care nu sunt comune celor două tabele.
Se cer următoarele:
TEMA nr. 8.11 Scrieţi un program care să creeze două tabele.
Primul tabel are nregistrări de forma:
Scrieţi al doilea program care să citească numărul K şi să afişeze
informaţii de forma:
Cartea T scrisă de A a fost citită de N cititori
unde T=titlul cărţii, A=autorul, N=numărul de cititori, iar N¿K.