ALTE DOCUMENTE
|
|||||
Tipuri de date
Definitie: Un tip de date reprezinta o caracteristica a datelor prin care se stabileste ce operatii se pot executa asupra lor, modul de codificare a datelor în memoria calculatorului si semnificatia acestor date.
Pentru a putea fi prelucrata, o data trebuie sa aiba stabilit tipul sau, cunoscându-se astfel dimensiunea zonei de memorie care trebuie alocata si modul de interpretare a valorilor din zona de memorie respecitva. Fiecare limbaj de programare are implementat o serie de tipuri de baza si de obicei permite definirea de noi tipuri pe baza celor predefinite.
În Foxpro exista patru tipuri pincipale de date: logic (sau boolean), numeric, sir de caractere si data calendaristica. Alaturi de acestea mai poate fi folosit un tip special de date numit "memo", prin intermediul caruia sunt manipulate sirurile de caractere foarte lungi sau cele cu lungime variabila. De asemenea vectorii, matricile sau tablourile multidimensionale pot fi considerate ca reprezentând un tip de date complex.
Foxpro nu necesita definirea explicita a tipului fiecarei date folosite într-un program ci este folosit ca mecanism elastic de determinare a tipului datelor. Mai exact, la initializarea 949i85j unei zone de memorie (variabile) este studiata valoarea care trebuie înscrisa în zona respectiva pentru determinarea dinamica a tipului sau. Acest mecanism are avantajul posibilitatii de modificare a tipului unei variabile chiar si în timpul rularii programului.
Definitie: Variabilele reprezinta zone de memorie folosite într-un program pentru memorarea temporara a unor date.
Fiecare variabila are asociat un nume prin care ea se identifica si îi este asociat un tip (de date) prin care se stabilesc datele ce po fi memorate si interpretate aceste date.
Încarcarea unei date în zona de memorie a unei variabile se face prin instructiunea de atribuire.
Instructiunea de atribuire are forma:
<nume variabila>=<expresie>
Ca urmare a acestei instructiuni variabila indicata în stânga semnului "=" va lua valoarea rezultata din evaluarea expresiei din dreapta semnului.
Exemplu:
S="Acesta este un sir de caractere"
Daca variabila s nu a fost definita anterior în cadrul programului atunci instructiunea va determina alocarea de memorie pentru variabila s si atribuirea pentru ea a unui sir de caractere.
B=56
A=3.5
Este caracteristic datelor ce nu pot lua decît doua valori "adevarat" sau "fals". O expresie de tip logic reprezinta o combinatie de operanzi si operatori, construita dupa anumite reguli sintactice, a carei evaluare va avea ca rezultat o valoare logica.
Operanzii ce intra în componenta expresiilor logice sunt de urmatoarele tipuri:
cîmpuri de tip logic ale unei baze de date
functii ce returneaza valori logice
variabile de tip logic
alte expresii logice
Operatorii logici, în ordinea prioritatii de evaluare, sunt sintetizati în urmatorul tabel:
Operator |
Semnificatie |
Grupeaza expresiile |
|
!,NOT |
Negatie logica |
AND |
si logic |
OR |
Sau logic |
Cea mai mare parte a datelor prelucrate de calculator este reprezentata de numere, pentru a caror descriere se foloseste tipul numeric.
Foxpro nefiind un limbaj orientat spre calcule matematice si stiintifice, ci unul orientat spre baze de date, poseda un singur tip pentru manipularea numerelor, cel "numeric". Pentru ca rezultatele obtinute sa fie cele asteptate este foarte important sa cunoastem ordinea de evaluare a operatorilor care se aplica operanzilor numerici.
În acest tabel prioritatea scade de sus în jos, pe acelasi nivel de prioritate evaluarea facându-se de la stânga la dreapta, în ordinea aparitiei operatiilor în expresie.
Exemplu:
se evalueaza astfel:
Între doua expresii numerice se pot aplica operatori relationali obtinându-se, astfel expresii logice
În cadrul expresiilor pot fi incluse ca operanzi, alaturi de variabile si constante, si functii cu ajutorul carora clasa operatiilor executate asupra numerelor se extinde nelimitat.
Cele mai importante functii care opereaza cu numere si returneaza valori numerice sunt:
functii referitoare la semnul datelor numerice
functii de aproximare a datelor numerice
functii matematice elementare
functii trigonometrice
ABS() - returneaza valoarea absoluta a numarului primit ca parametru
SIGN() - este folosita pentru a afla semnul numarului transmis ca parametru astfel:
+1 daca numarul este pozitiv
0 daca numarul este nul
-1 dacpa numarul este negativ
Exemplu:
? ABS(-600)
?SIGN(-14)
Partea întreaga a unei expresii numerice este returnata de functia INT()
Partea fractionara a unui numar se obtine folosind aceeasi functie prin scaderea din numarul respectiv a partii sale întregi.
Exemplu:
? INT(12.67)
a=12.67
?a-INT(a)
EXP() - pentru exponentiala
LOG() - pentru logaritmul natural
LOG10() - pentru logaritmul zecimal
SQRT() - pentru radical de ordinul 2
Exemplu:
?EXP(3)
?LOG(2)
?LOG10(10)
?SQRT(2)
?EXP(LOG(5))
SIN() - pentru sinus
COS() - pentru cosinus
TAN() - pentru tangenta
ASIN() - pentru arcsinus
ACOS() - pentru arccosinus
ATAN() - pentru arctangenta
Primele trei functii (cele directe) primesc ca argument un unghi exprimat în radiani si returneaza valoarea functiei corespunzatoare iar ultimele trei functii (inverse) realizeaza operatia inversa, primind ca parametru o valoare numerica si returnând unghiul corespunzator.
Functia PI() - returneaza valoarea constantei trigonometrice - 3,141592
Exemplu:
? SIN(PI()/2)
?COS(PI())
?TAN(PI()/4)
?ASIN(1)
?ACOS(1)
?ATAN(1)=PI()/4
.T.
Definitie: Un sir de caractere reprezinta o multime ordonata de caractere tratata ca un tot unitar.
Într-un sir de caractere, ordinea acestora este esentiala, fiecarui caracter i se poate asocia un numar reprezentând pozitia acestuia în cadrul sirului (primul caracter va avea pozitia 1, al II-lea pozitia 2 etc)
Numarul caracterelor dintr-un sir reprezinta lungimea sirului. Un subsir al sirului dat reprezinta o portiune din sir, începând de la o pozitie specificata si de lungimea data.
Constantele de tip sir de caractere se specifica prin multimea caracterelor care le compun, încadrate între apostrofuri sau ghilimele (la ambele capete trebuie sa avem acelasi tip).
Exemplu:
"Salut" 'Salut' corect
'Salut" "Salut' incorect
Observatie: pentru a include unul din cele doua delimitatoare într-un sir de caractere, multimea caracterelor ce alcatuiesc sirul va fi încadrata între delimitatorii de celalalt tip decât cel din sir.
Exemplu: "10'(zece minute)"
'10 "(zece secunde)'
Daca lungimea sirului este 0, obtinem sirul nul sau vid, care se specifica prin doua apostrofuri (sau ghilimele) consecutive, fara spatii sau alte caractere înre ele ("" sau '')
Asupra sirurilor de caractere se aplica doua tipuri de operatori:
Operatori de concatenare
Operatori de comparare sau relationali
Operatori de concatenare
Operatorul de concatenare simplu "+"
Operatorul de concatenare special "-"
Operatorul de concatenare simplu face ca din doua siruri de caractere sa se obtina un al treilea, prin alipirea celui de-al doilea sir la sfârsitul primului
Exemplu:
"cursul"+"nr 2"
dupa evaluare va avea valoarea: cursul nr 2
Operatorul de concatenare special este asemanator cu operatorul de concatenare simplu, cu deosebirea ca blancurile de la sfârsitul primului sir sunt trecute la sfârsitul celui de al doilea
Exemplu:
"Salut "-" prieteni!"
dupa evaluare obtinem:
"Salut prieteni! "
Operatori de comparare sau relationali
Operatorii relationali sunt operatori binari ce testeaza daca doua siruri de caractere se afla sau nu într-o relatie data specifica operatorului.
Operatorii relationali sunt
Operatorul "inclus în" $ - returneaza adevarat daca primul sir de caractere este continut în cel de-al doilea, altfel returneaza fals.
Exemplu: "calcul"$'calculator' (A)
'calcule'$'calculator' (F)
Operatorul "mai mic decât" < returneaza adevarat daca expresia din stânga sa (de tip sir de caractere) este mai mica decât expresia din dreapta.
Compararea a doua siruri se face astfel: se ia primul caracter din fiecare sir si se compara prin codurile ASCII corespunzatoare. În caz de egalitate între cele doua coduri ASCII se trece la compararea codurilor ASCII ale caracterelor de pe pozitia doi a fiecarui sir. Daca lungimile celor doua siruri difera se poate considera ca sirul mai mic este completat cu 0 pâna la egalitatea lungimilor.
LEN() - returneaza lungimea unui sir de caractere
? LEN('Constanta')
SUBSTR() - extrage un subsir din cadrul unui sir. Aceasta functie primeste ca prim argument sirul din care se extrage subsirul. Al doilea argument trebuie sa fie o valoare numerica indicând pozitia din cadrul sirului de baza de la care începe extragerea subsirului (indica pozitia primului caracter al subsirului), iar cel de-al treilea argument semnifica lungimea sirului care se extrage.
?SUBSTR('ABCDEF',2,3)
BCD
LEFT()
RIGHT() - permit extragerea unui subsir din cadrul unui sir
Spre deosebire de SUBSTR() aceste functii nu primesc decât un singur argument numeric (pe lânga sirul asupra caruia se opereaza), argument care indica numarul de caractere de extras din sir.
Functia LEFT() extrage un subsir din partea stânga a sirului de baza (începând de la primul caracter al sirului de baza)
Functia RIGHT() extrage subsirul din partea dreapta a sirului de baza (începând de la ultimul caracter al sirului spre stânga)
Exemplu: ? LEFT('O noapte furtunoasa',8)
O noapte
?RIGHT('O zi ploioasa',8)
ploioasa
REPLICATE(); SPACE() - permite crearea unui sir de caractere dintr-un alt sir, prin repetarea acestuia de un numar de ori
REPLICATE() - returneaza un sir de caractere obtinut prin repetarea sirului primit ca argument de un numar de ori, numar dat de ori, numar specificat în al doilea argument.
Exemplu: ?REPLICATE('ma',2)
Mama
SPACE() - returneaza un sir de blancuri cu lungimea elaga cu numarul transmis ca parametru
Exemplu: ? " "==SPACE(6)
.T.
ALLTRIM() = elimina blancurile de la începutul si sfârsitul sirului de caractere, deci de la stânga si de la dreapta acestuia
LTRIM() - elimina blancurile de la începutul sirului, de la stânga lui
TRIM() si RTRIM() - elimina blancurile de la sfâsitul sirului transmis, de la dreapta lui
Exemplu: ?ALLTRIM(' TEXT ')
TEXT
?'Ma numesc ' +RTRIM(' Ionescu ')+' Daniel'
Ma numesc Ionescu Daniel
? 'si am '+LTRIM(' 20')+' ani'
si am 20 ani
Adaugarea de blancuri sau alte caractere la un sir, la dreapta sau la stânga acestuia în scopul de a ajunge la o lungime data a sirului.
PADR() - completeaza sirul initial cu blancuri sau alte caractere la dreapta acestuia.
PADL() - completeaza cu blancuri la stanga sirului initial
PADC() - completeaza cu blancuri la ambele capete ale sirului initial (sirul initial este plasat în centrul sirului final)
Exemplu:?PADL('aliniat la dreapta',5,'-')
-----Aliniat la dreapta
?PADR('aliniat la stânga',5,'-')
Aliniat la stânga-----
? PADC('centrat', 5,'-')
-----centrat-----
LOWER() - transforma toate majusculele în litere mici, restul caracterelor ramânând neschimbate
UPPER() - transforma toate caracterele mici în majuscule corespunzatoare, restul caracterelor ramânând neschimbate
PROPER() - transforma primul caracter dintr-un cuvânt în majuscula iar urmatoarele în litere mici
A='Alfa'
?UPPER(a)
ALFA
B='ALfa'
?LOWER(b)
alfa
?PROPER('ioNeScu dAniel')
Ionescu Daniel
AT() - permite cautarea unui subsir în cadrul unui sir de caractere. Ea primeste ca argumente cele doua siruri (primul este cel cautat si cel de-al doilea cel în care se cauta), returnând pozitia la care s-a gasit subsirul în sir, sau zero în caz de negasire
?AT("Daniel", "Azi am vorbit cu Daniel la telefon")
.T.
OCCURS() - returneaza numarul de aparitii ale subsirului în cadrul sirului respectiv
?OCCURS("el", "Azi am vorbit cu Daniel la telefon")
Tipul data calendaristica
Datele stocate într-o baza de date caracterizeaza obiecte sau procese din lumea înconjuratoare, fie din punct de vedere static, fie din punct de vedere dinamic în evolutia lor în timp. Pentru memorarea si prelicrarea datelor calendaristice se foloseste tipul de date "data calendaristica".
În Foxpro, o constanta de tip data calendaristica se specifica prin luna, ziua si anul corespunzator, separate prin caracterul '/' si încadrate între acolade. Ordinea de specificare a zilei, lunii si anului sunt controlate de comenzi speciale ale limbajului. Implicit, anul se specifica prin doua cifre; ordinea este luna/zi/an, iar separatorul implicit este "/".
Formatul de specificare a datelor calendaristice este controlat de comanda SET DATE care poate primi unul din parametrii
AMERICAN (implicit) ll/zz/aa
ANSI aa.ll.zz
BRITISH zz/ll/aa
FRENCH zz/ll/aa
GERMAN zz.ll.aa
ITALIAN zz-ll-aa
USA ll-zz-aa
În specificarea anului se pot folosi doua cifre sau patru. Alegerea între aceste doua variante se face cu comanda SET CENTURY la care se adauga OFF pentru formatul de patru cifre sau ON pentru cel de doua cifre.
Data curenta a sistemului de operare se obtine prin functia DATE()
? DATE()
SET CENTURY ON
?DATE()
Ziua în cadrul lunii este returnata de functia DAY()
MONTH() - returneaza luna corespunzatoare unei expresii de tip data calendaristica
YEAR() - returneaza anul unei date calendaristice
? DAY()
?MONTH(DATE())
?YEAR(DATE())
?YEAR(DATE()+365)
GOMONTH() - primul parametru transmis functiei reprezinta data de la care se pleaca, iar cel de-al doilea numarul de luni cu care se avanseaza (sau devanseaza, în cadrul unui numar negativ)
? GOMONTH(,3)
?GOMONTH(,1)
|