Tipuri de Date in FoxPRO

Tipuri de date şi funcţii standard în FoxPro
Datele cu care lucrează FoxPro sunt de tip numeric, caracter, data calendaristică, logic. Asupra acestor tipuri de date s-au definit operaţii specifice şi au fost realizate funcţii standard dintre care cele mai des folosite vor fi explicate în continuare.
Funcţii uzuale asupra tuturor tipurilor de date:

MAX (,)
calculează maximul dintre două valori şi
MIN (,)
calculează minimul dintre două valori şi
TYPE()
întoarce litera corespunzătoare tipului de dată.
IIF(,,)
întoarce dacă este adevărat şi în caz contrar


Tipul numeric

O mare parte a datelor prelucrate de calculator este reprezentată de numere, pentru a căror descriere se foloseşte tipul numeric. Cu toate că limbajul FoxPro este un limbaj orientat pe lucrul cu baze de date şi nu unul orientat pe calcule matematice, ştiinţifice, tipul numeric este imlementat astfel ăcât să permită realizarea majorităţii operaţiilor matematice întâlnite în practică.
De asemenea, sunt prevăzute o serie de funcţii matematice prin care se pot calcula funcţiile matematice elementare.
Operanzii numerici care intervin în expresii pot fi:
- câmpuri numerice ale unei baze de date;
- funcţii care returnează valori numerice;
- variabile de tip numeric;
- constante numerice.
Operatori care se aplică unor operanzi numerici, având ca rezultate tot valori numerice sunt : , ^ (ridicarea la putere), * ( înmulţire), / (împărţire), % (modulo, restul împărţirii), + (adunare), - scădere. Între două expresii numerice se pot aplica, de asemenea, operatori relaţionali, obţinându-se expresii logice.
Funcţiile standard uzuale:**

ABS ()
calculează valoarea absolută din
SQRT ()
calculează radical din (strict pozitiv)
ROUND (,)
este rotunjită la zecimala dată de
MOD (,)
calculează restul împărţirii întregi a lui la
INT ()
întoarce un întreg rezultat prin trunchierea zecimalelor
CEILING ()
întoarce cel mai mic întreg mai mare sau egal cu argumentul
FLOOR ()
întoarce cel mai mare întreg mai mic sau egal cu argumentul
SIGN ()
întoarce valoarea –1 pentru argument negativ, 1 pentru argument pozitiv şi 0 pentru argument nul.
RAND ()
returnează un număr aleator în intervalul (0, 1)
STR ([, [,]])
conversia între tipul numeric şi tipul şir: este numărul, este lungimea, numărul de poziţii pe care se va face reprezentarea părţii zecimale.


Exemplu:
? 2 / 3
0, 67
SET DECIMAL TO 4
? 2 / 3
0 , 6667
Exemple cu funcţii:
? ABS ( a )
400
? SIGN ( - 32 )
- 1
a = - 2 / 3
? a = SIGN ( a ) * ABS ( a )
. T .
? INT ( 14 . 46 )
14
? INT ( - 2 . 25 )
- 2
a = 14 . 46
? a – INT ( a )
0 . 46
a = - 2 . 25
? a – INT ( a )
- 0 . 25
? CEILING ( 8 . 32 )
9
? CEILING ( -4 . 23 )
- 4
? FLOOR ( 8 . 32 )
8
? FLOOR ( - 4 . 23 )
- 5
? EXP ( 2 )
7 . 39
? LOG ( 2 )
0 . 69
? LOG 10 ( 2 )
1 . 00
? EXP ( LOG ( 3 ) )
3 . 00
? SQRT ( 2 )
1 . 41

Tipul şir de caractere

Un şir de caractere reprezintă o mulţime ordonată de caractere care se tratează ca un tot unitar. Într-un şir de caractere ordinea acestora fiind esenţială, fiecărui caracter I se poate asocia un număr reprezentând poziţia aceastuia în cadrul şirului.
Numărul caracterelor dintr-un şir reprezintă lungimea şirului. Un subşir al şirului dat repreuintă o porţiune din şir, începând de la o poziţie specificată şi de lungimea dată
Constantele de tip şir de caractere se specifică prin mulţimea caracterelor care le compun, încadrate între apostrofuri simple sau duble ( la ambele capete trebuie să fie acelaşi tip de apostrof ).
Pentru a include unul dintre cele două delimitatoare într-un şir de caractere, mulţimea caracterelor ce alcătuiesc şirul va fi încadrată între delimitatorul de celălalt tip decât cel din şir. Dacă lungimea şirului este 0 obţinem şirul vid sau nul, care se specifică prin două apostrofuri consecutive fără spaţii sau alte caractere între ele.
Datele de tip şir de caractere pot avea lungimea maxim 255 caractere ASCII şi se reprezintă intern câte un caracter pe octet în binar.
Operaţii asupra datelor de tip şir:
- concatenarea a două şiruri se realizează prin operatorii de concatenare (+, -); (+) realizează concatenarea a două şiruri;
Exemplu: “ strada _ “ + “ George _ Coşbuc “
După evaluare, va avea valoarea:
“ strada _ George _ Coşbuc “
Operatorul (-) realizează concatenarea termenilor cu mutarea spaţiilor de la sfârşitul primului şir la sfârşitul şirului rezultat.
Exemplu: “ Salut “ - “ prieteni !“
După evaluare, vom obţine şirul de caractere
“ Salut prieteni ! “
se observă că blancurile de la începutul şirului al doilea îşi păstrează poziţia în şir.
- testarea apartenenţei unui şir la un alt şir este realizată prin operatorul ($); poate fi folosit în expresii logice.
De exemplu, expresia:
“ calcul “ $ “ calculator “
este adevărată, pe când expresia:
“ calcule “ $ “ calculator “
va fi evaluată la valoarea logică fals.
Compararea şirurilor de caractere de lungimi diferite este controlată de comanda :
SET EXACT ON / OFF

În starea ON şirurile se compară de pe toată lungimea lor (cu excepţia spaţiilor de la sfârşitul şirului). În starea OFF se ia lungimea cea mai scurtă şi, dacă pe aceeaşi lungime şirurile sunt egale, rezultatul este .T..
Funcţii uzuale asupra şirurilor

SUBSTR (, ,)
extrage un subşir din şirul începând cu
caracterul de pe poziţia pe lungime

LEFT (, )
extrage primele caractere din şirul
RIGHT (, )
extrage ultimele caractere din şirul
LEN ()
întoarce lungimea şirului
REPLICATE (, )
întoarce un şir având multiplicat de
ori
SPACE ()
Întoarce un şir de spaţii
LTRIM ()
elimină spaţiile de la stânga şirului
ex.: LTRIM(’MIA’)=”MIA”
RTRIM ()/ TRIM ()
elimină spaţiile de la dreapta şirului
ex.: RTRIM(“MAI”’)=”MAI”
AT (, )
întoarce poziţiile şirului în
ISALPHA ()
testează dacă şirul începe cu o literă
ISLOWER ()
testează dacă şirul începe cu minusculă
ISUPPER ()
testează dacă şirul începe cu majusculă
LOWER ()
transformă şirul în minuscule
UPPER (expC)
transformă şirul în majuscule
STUFF (,, , )
înlocuieşte în începând cu poziţia un subşir de lungime prin şirul
CTOD ()
realizează conversia unui şir la data calendaristică
VAL ()
realizează conversia unui şir la număr

Exemple:
? CHR ( 49 )
1
? CHR ( 65 ) == “ A “
. T .
? ASC ( “ A “ )
65
? ASC ( “ a “ ) = ASC ( alfa )
. T .
? “ A “ == CHR ( ASC ( “ A “ ) )
. T .
? 65 == ASC ( CHR ) 65 ) )
. T .
? SUBSTR ( “ ABCDEF “ , 2, 3 )
BCD
? SUBSTR ( “ Ziua Bună “ , 6 )
Bună
? LEFT ( “ La mulţi ani ! “ , 2 )
La
? RIGHT ( “ Noapte bună ! “ , 6 )
bună !
? REPLICATE ( “ a “ , 5 )
a a a a a
? REPLICATE ( “ “ , 6 ) == SPACE ( 6 )
. T .
? ALLTRIM ( “ GAMA “ ) == “ GAMA “
. T .
? “ Mă numesc “ + RTRIM ( “ Ionescu “ ) + “ Daniel “
Mă numesc Ionescu Daniel
? “ şi am “ + LTRIM ( “ 24 “ ) + “ ani. “
şi am 24 ani
? AT ( “ nr. “ , “ Strada George Coşbuc, nr. 63 – 64 “ )
22
? LEN ( “ Salutări ! “ )
10
? LEN ( “ Strada George Coşbuc “ + “ nr. 150 “ )
27
a = “ ALFA “
b = “ alfa “
? UPPER ( a ) == UPPER ( b )
. T .
? LOWER ( a ) == LOWER ( b )
. T .
STORE “ pala “ TO şir
şir = STUFF ( şir , 3 , 0 , “ rale “ )
? şir
paralela
şir = STUFF ( şir , 3 , 3 , “ sar “ )
? şir
pasarela
şir = STUFF ( şir , 7 , 2 , “ “ )
? şir
pasare

Tipul dată calendaristică

Datele calendaristice pot fi reprezentate în mai multe formate având ca delimitator acolada. Forma de prezentare a unei date calendaristice depinde de comanda SET DATE:

SET DATE [TO]

unde poate fi: AMERICAN / GERMAN / ANSI / ITALIAN / DMY /BRITISH /JAPAN /FRENCH /USA /MDY /YMD
Formatul AMERICAN prezintă data calendaristică sub forma: ll/zz/aa.; formatul GERMAN sub forma zz.ll.aa., etc.
Includerea secolului în formatul de dată este determinată de starea comutatorului SET CENTURY ON/OFF. Implicit este OFF.
Indicarea semnului folosit ca separator al informaţiilor de tip dată calendaristică este dat de comanda SET MARK. Implicit separatorul este dat de formatul de reprezentare. De exemplu formatul AMERICAN foloseşte ca separator ”/”.

SET DATE TO

unde reprezintă un singur caracter ce va fi folosit ca separator al informaţiilor din data calendaristică.

Operaţii care se pot face cu datele calendaristice sunt:
- compararea a două date se realizează prin operatorii relaţionali:
- diferenţa dintre două date calendaristice returnează un număr de zile:
- prin adunarea unui număr de zile la o dată calendaristică se obţine o altă dată:
- prin scăderea unui număr dintr-o dată calendaristică se obţine tot o dată;
Funcţiile referitoare la date calendaristice sunt :

DATE()
întoarce data curentă de la sistem
DAY ()
extrage nr. zilei din dată
MONTH()
extrage nr. lunii din dată
CMONTH()
întoarce numele lunii
YEAR()
extrage anul din data calendaristică
TIME()
extrage ora sistem sub forma şirului ‘HH:MM:SS’
DTOS()
întoarce data sub forma ‘secol – an lună zi’
DMY()
întoarce data sub forma ‘zi nume-lună an’
MDY()
întoarce data sub forma ‘nume – lună zi an’
DTOC()
conversie data la şir

Exemple:
? DATE ( )
11 / 12 / 2000
? CDOW ( DATE ( ) )
Saturday
? DOW ( {10 / 02 / 1864} )
1
? DAY ( {03 / 14 / 1990} )
14
? MONTH ( DATE ( ) )
3
? CMONTH ( {03 / 25 / 1990} )
March