sâmbătă, 22 iunie 2013

FoxProW pentru incepatori Cap. 2, 3


2. TIPURI DE DATE

             Un tip de date reprezintă o caracteristică a datelor prin care se stabileşte ce operaţii se pot executa asupra lor, modul de codificare în memoria calculatorului, semnificaţia acestor date. În FoxProW există următoarele tipuri de date:
             1. Tipul logic;
             2. Tipul numeric;
             3. Tipul şir de caractere;
             4. Tipul data calendaristică;
             5. AIte tipuri ce nu vor fi trate aici.
            Cu privire la tipurile de date se va preciza în continuare modul de specificare a datelor de tipul respectiv, operatorii ce se aplică asupra acestora şi comenzile şi funcţiiIe referitoare la datele tipului respectiv.
Ele se pot găsi sub forma constantelor, a variabilelor şi a campurilor din bazele de date.
           Constantele sunt elemente ce nu-şi modifică forma sau dimensiuniIe în timpul unui program. Ee rămân în tot timpul programului egale cu ele însele aşa cum Ie arată şi numele. De exemplu
2, 2.5, 114, 'FOX’, ‘fox’, {02103198} ,.t. etc.
           1. Şiruri de caractere - se specifică între apostroafe ghilimele sau paranteze drepte. Maxim 254 caractere. Exemplu “Foxpro”
          2. Tipul numeric. Maxim 18 poziţii numerice cu zecimale sau întregi.
Exemplu: Întregi 2, -5 etc, fracţii 1/4, 2.5, etc,numere iraţionale etc.
          3. Tipul logic .T. sau .t. pentru TRUE
.F. sau .f. pentru FALSE
         4. Tipul dată calendaristică {LL/ZZ/AA}. Se pot face operaţii cu acest tip de dată dar trebuie avut în vedere că nu este un tip numeric ci un tip special. Exemplu {
02/05/02}.

2.1 Tipul logic

          Este un tip de dată caracteristic ce nu poate lua decât două valori: “adevărat” (în engleză True) sau “fals” (neadevărat, în engleză False).
          Pentru a specifica cele două valori logice; adevarat şi fals se folosesc (construcţiile urmatoare: .T. sau .t. pentru adevarat şi .F. sau .f. pentru fals). O expresie de tip logic reprezintă o combinaţie de operanzi şi operatori construită după anumite reguli sintactice a carei evaluare va avea ca rezultat un rezultat logic (adevărat sau fals). Operanzii ce intră în componenţa expresiilor Iogice sunt de două tipuri: câmpuri de tip logic ale unei baze de date sau variabile de tip logic, funcţii care returnează valori logice sau alte expresii logice.
          Operatorii logici, în ordinea priorităţii de evaluare, sunt sintetizaţi în următorul tabel:   
                                    Operator            Semnificaţie
                                        (,)                   grupează expresiile
                                       ! NOT              negaţie logică
                                         AND              şi logic
                                         OR                 sau logic

Aceşti operatori şi operaţiile logice sunt explicate şi studiate pe larg în matematica booleană. Exemple de operaţii logice:
          ? 1 <4 and 5<3 afişează .F. (1 <4 dar 5 nu este mai mic decât 3 deci relaţia datorită operatorului şi logic este evaluată ca fals);
          ? 6<3 OR 4*2<9 afişează .T. (6 nu este mai mic decât 3 dar 4*2=8<9 deci relaţia datorită oparatorului sau este evaluată ca adevărată).

2.2 Tipul numeric

          O mare parte a datelor de prelucrat o reprezintă de fapt numerele. Deşi FoxProW-ul este destinat prelucrării bazelor de date şi nu numerelor totuşi tipul numeric este implementat astfel încât în Fox se pot face majoritatea operaţiilor matematice întâlnite în practică. De asemenea FoxProW-ul este prevăzut cu o serie de funcţii matematice prin care se pot calcula funcţii matematice elementare cum ar fi exponenţiala, logaritmul, funcţiile trigonometrice etc.
         Operanzii numerici ce intervin în expresii pot fi câmpuri numerice ale bazelor de date, constante şi variabile numerice şi funcţii care returnează valori numerice.
        Operatorii ce se aplică unor operanzi numerici având ca rezultat valori numerice sunt prezentate în tabelul de mai jos:

Operator
Semnificaţie
(,)
Grupează expresiile
** , ^
ridicare la putere
*, / , %
înmulţire, impărtire, modulo (rest împărtire)
+, -
adunare, scădere


        Între două expresii numerice se pot aplica operatori relaţionali, operaţiile respective având ca rezultat expresii logice:

Operator
Semnificaţie
>
mai mare decât
<
mai mic decât
=
egal cu
<>, #, !=
dîferit de (oricare din semne)
<=
mai mic sau egal cu
>=:
mai mare sau egai cu


Funcţiile matematice sunt funcţii implementate în FoxProW care au ca rezultat valori matematice.
ABS (nr) - returnează valoarea absolută a lui nr.
Exemplu a=abs(nr) - daca nr este -5.2 a = 5.2 sau
?abs(-5.2) afişează 5.2
SQRT (nr) - returnează radical din nr.
Exemplu a=sqrt(nr) - dacă nr este 9, a=3 sau ?sqrt(9) afişează 3
INT (nr) - returnează partea întreagă a lui nr.
Exemplu - dacă se tastează ?int(3.14) atunci calculatorul va afişa 3, sau dacă se tastează ?int(2), se afişează 1.
ROUND (nr,nrz) - retumează nr rotunjit la nrz zecimale
Exemplu - ?round(5.243567,2) afişează 5.24
MOD (nr1,nr2) - returnează restul împărţirii întregi a lui nr1 şi nr2. Exemplu - MOD(5,3) afişează 2 (afşarea se face cu calcul rotunjit).
RAND () - generează numere aleatoare între 0 şi 1
SIGN(expn) retumează:
+1 dacă expn este pozitiva, -1 daca expn este negativa 0 dacă expn este 0.
Exemplu; ? sign(-40) afişează -1
CEILING (expn) - returnează cel mai apropiat întreg mai mare sau egal cu expn.
Exemplu: ? ceiling(8.32) afişează 9
FLOOR(expn) - returnează cel mai apropiat întreg mai mic sau egal cu expn.
Exemplu: ? floor{-8,32) afişează -9
Clauza SET DECIMALS stabileşte numărul de zecimale cu care vor fi afişate cifrele (şi nu numărul de zecimale în calcule, care rămâne acelaşi).
Exemplu; SET DECIMAL TO 5
?2/3 afişează 1,66667
EXP (expn) - returnează valoarea eexpn
LOG (expn) - retuneaează logaritmul natural din expn
LOG10(expn) - idem logaritmul zecimal
Exemplu:?log10(1000) returnează 3.
Operatorii logici, în ordinea priorităţii de evaluare, sunt sintetizaţi în următorul tabel:
Aceşti operatori şi operaţiile logice sunt explicate şi studiate pe larg în matematica booleană. Exemple de operaţii logice:
? 1 <4 and 5<3 afişează .F. (1 <4 dar 5 nu este mai mic decât 3 deci relaţia datorită operatorului şi logic este evaluată ca fals);
? 6<3 OR 4*2<9 afişează .T. (6 nu este mai mic decât 3 dar 4*2=8<9 deci relaţia datorită oparatorului sau este evaluată ca adevărată).

                          2.2 Tipul numeric

O mare parte a datelor de prelucrat o reprezintă de fapt numerele.
Deşi FoxProW-ul este destinat prelucrării bazelor de date şi nu numerelor totuşi tipul numeric este implementat astfel încât în Fox se pot face maiontatea operaţiilor matematice întâlnite în practică. De asemenea FoxProW-ul este prevăzut cu o serie de funcţii matematice prin care se pot calcula funcţii matematice elementare cum ar fi exponenţiala, logaritmul, funcţiile trigonometrice etc.
Operanzii numerici ce intervin în expresii pot fi câmpuri numerice ale bazeior de date, constante şi variabile numerice şi funcţii care returnează valori numerice.
Operatorii ce se aplică unor operanzi numerici având ca rezultat valori numerice sunt prezentate în tabelul de mai jos:

Operator
Semnificaţie
(,)
grupeaza expresiile
** , ^
ridicare la putere
*, / , %
înmulţire, impărtire, modulo (rest împărţire)
+, -
adunare, scădere


Între două expresii numerice se pot aplica operatori relaţionali, operaţiile respective având ca rezultat expresii logice:

Operator
Semnificaţie
>
mai mare decât
<
mai mic decât
=
egal cu
<>, #, !=
diferit de (oricare din semne)
<=
mai mic sau egal cu
>=:
mai mare sau egai cu


Funcţiile matematice sunt funcţii implementate în FoxProW care au ca rezultat valori matematice.
ABS (nr) - returnează valoarea absolută a lui nr.
Exemplu a=abs(nr) - daca nr este -5.2 a = 5.2 sau
?abs(-5.2) afişează 5.2
SQRT (nr) - returnează radical din nr.
Exemplu a=sqrt(nr) - dacă nr este 9, a=3 sau ?sqrt(9) afişează 3
INT (nr) - returnează partea întreagă a lui nr.
Exemplu - dacă se tastează ?int(3.14) atunci calculatorul va afişa 3, sau dacă se tastează ?int(2), se afişează 1.
ROUND (nr,nrz) - retumează nr rotunjit la nrz zecimale
Exemplu - ?round(5.243567,2) afişează 5.24
MOD (nr1,nr2) - returnează restul împărţirii întregi a lui nr1 şi nr2. Exemplu - MOD(5,3) afişează 2 (afşarea se face cu calcul rotunjit).
RAND () - generează numere aleatoare între 0 şi 1
SIGN(expn) retumează:
+1 dacă expn este pozitiva, -1 daca expn este negativa 0 dacă expn este 0.
Exemplu; ? sign(-40) afişează -1
CEILING (expn) - returnează cel mai apropiat întreg mai mare sau egal cu expn.
Exemplu: ? ceiling(8.32) afişează 9
FLOOR(expn) - returnează cel mai apropiat întreg mai mic sau egal cu expn.
Exemplu: ? floor{-8,32) afişează -9
Clauza SET DECIMALS stabileşte numărul de zecimale cu care vor fi afişate cifrele (şi nu numărul de zecimale în calcule, care rămâne acelaşi).
Exemplu; SET DECIMAL TO 5
?2/3 afişează 1,66667
EXP (expn) - returnează valoarea eexpn
LOG (expn) - retuneaează logaritmul natural din expn
LOG10(expn) - idem logaritmul zecimal
Exemplu:?log10(1000) returnează 3.
? exp(log(3)) returnează 3.00
În FoxProW s-au introdus şi funcţiile trigonometrice astfel:
Pl() este o constantă a matematicii (egală cu 3,141592). Ea foloseşte la conversia unor unghiuri din radiani în grade hexagesimale sau invers.
X°rad = 2*pi/360° hexagesimale
DTOR(expn) - realizează conversia din grade în radiani iar conversia inversă se realizează prin funcţia RTOD. Ele au ca argumente grade hexagesimale (dtor) şi radiani (rtod).
Exemplu: ? dtor (pi()*45) returnează 0.50
?rtod(pi()/4) - returnează 45.00
SIN(expn) - returnează sinusul (functie trigonometrică)
COS(expn) - returnează cosinusul
TAN(expn) - retumează tangenta
Exemplu: ? SIN(pi()/2) afişează 1.00
ASIN(expn) - funcţia arcsinus
ACOS(expn) funcţia arccosinus
ATAN(expn) functia arctangentă - în care expresia „expn” trebuie să se găsească în intervalul -pi()/2 şi pi()/2 (-1.57079 şi 1.57079).
Exemplu: ?asin(1) afişază1,57
Functia ATN2(expn1,expn2) este o funcţie a cărei argumente sunt abscisa şi repectiv ordonata unui unghi care este returnat de funcţie, ca în figura alăturată:
         
          Functii referitoare la calcule financiare şi statistice:
PAYMENT(expn1,expn2,expn3) returnează valoarea fiecărei plăţi ce trebuie efectuată în fiecare perioadă într-un împrumut cu dobândă fixă. Expn1 reprezintă valoarea împrumutului, expn2 - este rata dobânzii (la nivelul unei perioade) iar expn3 rezintă numărul de plăţi de returnat pentru împrumutul respectiv. Funcţia returnează valoarea plătii în aceeaşi monedă cu împrumutul.
Exemplu: ? payment(1000000,. 10,12) afişează 146763.32. Acesta înseamnă că valoarea de returnat lunar pentru un împrumut făcut pentru 1000000 cu o dobândă 10% pe timp de un an este de 146763,32
PV (expn1,expn2,expn3) returnează valoarea prezentă a unei investiţii. Aceasta se calculează ca o serie de plăţi periodice egale la o rată a dobânzii constantă. Expn1 este valoarea unei plăţi periodice, expn2 este rata dobânzii iar expn3 reprezintă numărul de plăti.
Exemplu: ? pv( 100000,.12,6) afişează 411140,73 ceea ce înseamnă că valoarea investitiei este de 411140.73 pentru o investiţie făcută timp de 6 luni (de exemplu plata fiind făcută o dată pe lună) la o dobândă de 12%,
? FV (expn1,expn2,expn3) returnează valoarea viitoare a unei investiţii, calculată ca o sumă de plăţi periodice constante cu o dobândă fixă. Expn1 reprezintă valoarea unei plăţi, expn2 este rata dobânzii iar expn3 reprezintă numărul de plăţi periodice.
Exemplu: ? fv(100000,.12,6) afişează 811518.90 ceea ce înseamnă că valoarea investiţiei viitoare (făcută peste 6 luni) echivalentă cu o investiţie făcută cu câte 100000 începând de acum în fiecare lună cu o dobândă de 12% anual este de 811518.90.

2.3 Tipul şir de caractere

Un şir de caractere reprezintă o mulţime ordonată de caractere care se tratează ca un tot unitar. Ordinea fiind esenţială în şirurile de caractere, fiecărui caracter i se poate asocia un număr (primul 1, al doilea 2 şamd). Numărul caracterelor reprezintă lungimea şirului. Un subşir al unui şir este dat de o porţiune din şir, începând cu o poziţie şi de o lungime dată. Sunt admise ca delimitatori ai unui şir apostroafele, ghilimelele sau parantezele pătrate, dar întotdeauna delimitatorii trebuie să fie identici. Dacă se doreşte includerea unui apostrof într-un şir se vor folosi ca delimitatori ai şirului ghilimelete sau parantezele pătrate.
O expresie şir de caractere reprezintă o combinaţie de operanzi şi operatori, realizată după anumite reguli, care are ca evaluare un rezultat şir de caractere. Operanzii ce intră în componenţa acestor tipuri de expresii sunt:
  • câmpuri de tip şir de caractere din bazele de date;
  • variabile şi constante tip şir de caractere;
  • funcţii ce retumează şiruri de caractere.
Asupra şirurilor de caractere se poate acţiona cu operatori de concatenare şi de comparare sau relaţionali.
Operatorii de concatenare sunt ”+” şi ”-„. Primul realizează alipirea celui de al doilea operand la primul.
Exemplu: „Fox” + „ProW” are ca rezultat şirul „FoxProW”. Cel de al doilea   („-„) este asemănător cu primul cu diferenţa că spaţiile de la sfârşitul primului şir sunt trecute la sfârşitul celui de al doilea şir. Operatorii relaţionali sunt prezentaţi în tabelui de mai jos:
operator
Relaţie
$
inclus în
<
mai mic decât
>
mai mare decât
<>, #, !=
diferit de
<=
mai mic sau egal
>=:
mai mare sau egal
==
identic

Operatorul $ returnează .T. dacă primul şir este inclus în cel de al doilea, altfel returnează fals.
Exemplu var= 'calcul' $ 'calculator' var ia valoarea adevărat.
Compararea a două şiruri de caractere se face astfel: Se compară primul caracter al celor două şiruri. Dacă ele sunt identice se continuă compararea cu cele de al doilea caracter. Dacă nu atunci sunt comparate codurile ascii şi cel mai mare dă caracterul şirului (aparţine şirului mai mare),
Exemplu: 'Fox' < 'Pro' pentru că 'F' are codul ascii < 'P'
Compararea a două şiruri este influenţată de setarea SET EXACT. Dacă SET EXACT este ON două şiruri sunt egale dacă ele corespund caracter cu caracter caracterele spatiu de la sfârşit fiind ignorate. Dacă SET EXACT este OFF (opţiune implicită) două şiruri identice pe lungimea celui mai scurt sunt considerate egale.
Pentru comutarea între cele două variante se foloseşte comanda:
SET EXACT ON|OFF
Funcţii referitoare la şirurile de caractere:
LEN (şir) - retumează lungimea şirului în număr caractere
Exemplu - ?len('FOXPRO') afişează 6.
SUBSTR (şir,pozinc,lung) - retumează un alt şir de lungime = lung, începând cu pozinc din şir.
Exemplu - ?substr('foxpro',2,3) afişează sirul 'oxp'
UPEER (şir) - converteşte un şir în majuscule
Exemplu - ?upper('foxpro') afişează şirul 'FOXPRO'
LOWER (şir) - idem minuscule
Exemp!u - ?!ower('FoXpro') afişează şirul 'foxpro'
PROPER (şir) - idem în care primul caracter este majusculă iar următoarele sunt minuscule
Exemplu - ?proper('ionescu') afişează şirul 'lonescu'
REPLICATE (şir,nr) - repetă un şir de nr de ori
Exemplu - ?repl('!',10) afişează şiru! '!!!!!!!!!!'
LEFT (şir,nr) - extrage primele nr caractere stânga din şir
Exemplu - ?left('foxpro2,3) afişează şirul 'fox' ,
RIGHT (şir,nr) - idem ultimele nr caractere
Exemplu - ?right('foxpro2',3) afişează şirul 'ro2'
CHR (expn) - returnează caracterul ascii corespunzător codului numeric expn (expn trebuie să fie cuprins între 0 şi 255).
Exemplu:?chr(65) afişează A
ASC (expc) - retumează condul ascii al primului caracter al şirului expc. Exemplu; ?ASC('A') afişează 65
CHR şi ASC() sunt funcţii inverse.
ALLTRIM(expc) - elimină spaţiile de la începutul şi sfârşitu! şirului LTRIM(expc) - elimină spaţiile din stânga şirului
RTRSM(expc) - elimină spaţiile de la sfârşitui şirului (dreapta).
Exemplu: ? altrim ' casa ' afişează şirul 'casa'
PADC(expr,expnr,expc) - adaugă un număr expn de caractere expc la
dreapta şi la stânga şirului expr (centrat).
PADL(expr,expn[,expc]) - adaugă un număr expn de caractere expc la
stânga şirului expr.
PADR(expr,expn[,expc]) - adaugă un număr expn de caractere expc la
dreapta şirului expr.
Exemplu: ? PADL('Pagina 1',40/-') afişează:
————————Pagina 1
Funcţiile AT(), ATC(), RAT() caută un subşir într-un şir dat. Funcţiile au sintaxa de forma:
AT(expc1 ,expc2 [,expn])
ATC(expc1,expc2[,expn])
RAT(expc1,expc2 [,expn])
Dacă căutarea se încheie cu succes, funcţiile returnează poziţia subşirului în cadrul şirului, altfel returnează 0. Expresia expn este opţională şi dacă ea se specifică, indică a câta apariţie a subşirului de căutat încheie actiunea de căutare. Cu alte cuvinte se caută a expn-a apariţie a lui expnc1 în expnc2.
La funcţiile AT() şi ATC() căutarea începe cu primul caracter şi continuă cu următoarele. La RAT() căutarea începe cu ultimul caracter continuând spre începutul şirului.
AT() este sensibilă la tipul caracterelor, iar ATC() nu face distincţie între caracterele mici şi majuscule.
Exemplu: ? AT('nr,', 'Strada George Coşbuc,nr.63-65') afişează 22
Funcţiile ATLINE(), ATCLINE(), RATLINE() caută subşirul expc1 în şirul expc2 returnând în caz de reuşită numărul liniei în care a fost găsit, iar în caz de nereuşită 0 (pentru şiruri continuate pe mai multe linii). Sintaxa acestor funcţii este:
ATLINE(expc1,expc2)
ATCLINE(expc1,expc2)
RATLlNE(expc1,expc2)
Funcţia OCCURS() caută de asemenea un subşir într-un şir dar ea retumează numărul de apariţii al subşirului în şir. Ea are sintaxa:
OCCURS(expn1,expn2)
Exemplu: ? OCUURS ('a',' acasa la mine') afişează 3
ISALPHA(expc) returnează adevărat dacă şirul începe cu un caracter alfabetic altfel ea va returna .F.
ISDIGIT(expc) returnează .T. dacă şirul începe cu o cifră.
ISLOWER(expc) retumează .T. dacă şirul începe cu o literă mică.
ISUPPER(expc) retumează .T. dacă şirul începe cu o literă mare.
Funcţiile au sintaxa:
ISALPHA(expc)
ISDIGIT(expc)
ISLOWER(expc)
ISUPPER(expc) unde expc este şirul de caractere testat.
CHTRAN(expd,expc2,expc3) înlocuieşte în expc1 caracterele care sunt prezente în expc2 cu caracterele prezente în expc3. Transformarea se realizează astfel:
se ia primul caracter din expd şi dacă există în expc2 se înlocuieşte cu caracterul de pe aceeşi poziţie în expc3. Dacă nu atunci el (primul caracter expd) se introduce în şirul final, Apoi se continuă cu al doilea caracter şamd.
Exemplu: ? CHTRAN ('compuse','mpse','nfz') afişează confuz
STRTRAN(expc1,expc2 [,expc3] [,expn1] [,expn2] realizează înlocuirea unui grup de caractere (expc2) cu un alt grup de caractere în care:
expd - şirul de bază, în care se fac înlocuirile
expc2 - şirul ce va fi înlocuit cu expc3
expc3 - şirul cu care se fac înlocuirile. Dacă lipseşte se consideră şirul nul (se şterg caracterele expc2)
expn1 - dacă există, specifică de la a câta apariţie a lui expc2 în expd să se înceapă înlocuirile. Dacă lipseşte se consideră 1.
expn2 - specifică numărul de înlocuiri ce se efectuează. Dacă lipseşte se vor înlocui toate subşirurile găsite.
Exemplu: ? STRTRAN('calculator personal' , 'ers' , 'rofesi' ,1,1) afişează calculator profesional
STUFF(expc1,expn1,expn2,expc2) Este o funcţie asemănătoare care inlocuieşte într-un şir (expc1) începând cu o anumită poziţie indicată de expn1 un număr de caractere (expn2) un şir de caractere (expc2).
Dacă expn2 este 0, are loc inserarea lui expc2 începând de la poziţia expn1. Dacă expc2 este vid, se obţine ştergerea subşirului specificat din şirul de bază.
Exemplu: ? STUFF ('pala',3,0,'rale') afişază paralela
SYS(15,expc1,expc2) transformă un şir de caractere (expc2) după o tabelă de transformare(expc1).
Transformarea se realizează astfel: se calculează codul ascii al primului caracter de transformat (din expc2) după care se preia din expc1 caracterul de pe poziţia egală cu acest cod ascii şi se realizează înlocuirea. Dacă pe poziţia calculată în expc1 nu se găseşte nici un caracter (şirul fiind mai scurt) nu are loc nici o transformare.
Exemplu: ? SYS(15,replicate('-',96+'e'),'masa') afişază mese
LlKE(expc1 ,expc2) compară cele două expresii caracter astfel: expc1 este modelul în care trebuie să se încadreze expc2 returnând .T. în caz de potrivire. În model (expc1) este permisă folosirea caracterelor "*" şi "?" cu semnificaţia "orice grup de caractere pentru * şi "orice caracter" pentru ?. Folosirea lor este asemănatoare cu cea din DOS.
Căutarea este influenţată de clauza SET COMPATIBLE cu sintaxa: SET COMPATIBLE ON|OFF
Dacă set compatible este ON, înainte de căutare se înlătură toate spaţiile din cele două şiruri (dacă nu atunci ele nu sunt înlăturate).
Exemplu: ? LIKE ('*TER','COMPUTER') afişază :T.

                    2.4 Tipul dată calendaristică
Expresiile de tip dată caledaristică pot să conţină:
- câmpuri dată ale unor baze de date
- variabile şi constante tip dată calendaristică
- funcţii cu rezultat dată calendaristică
O constantă tip dată calendaristică precizează ziua, luna şi anul (când a avult loc un eveniment de exemplu). Cele trei elemente ate datei cuprind câte două caractere şi sunt delimitate prin delimitatori care pot fi".","/", sau"-".
FoxProW tratează datele invalide (exemplu {30-02-98} ca date vide adică { -- } sau { }). Constantele de acest tip sunt reprezentate în calculator ca numere reprezentând zile deci la o constantă sau variabllă tip dată se pot aduna cifre sau se pot scădea cifre dacă ele au semnificatia adunării sau scăderii unui număr de zile calendaristice.
Formatul de afişare al datelor calendaristice poate fi modificat. El este controlat prin comanda SET DATE cu sintaxa:
SET DATE [TO] AMERICAN|ANSI|BRITISH|FRENCH|
GERMAN|ITALIAN|JAPAN|USA|MDYlDMY|YMD
Tabelul care urmează sintetizează acţiunea comenzii SET DATE (implicit data este afişată cu formatul AMERICAN).
Tipul datei
Formatul
American,MDY
ll/zz/aa
ANSI
yy.ll.aa
British,French,DMY
zz/ll/aa
German
zz.ll.aa
Italian
zz-ll-aa
Japan.YMD
aa/ll/zz
USA
ll-zz-aa


În specificarea anului se pot folosi două cifre, când se presupune că se face referire la sec. XX (primele cifre sunt 19) sau se specifică toate cele patru cifre ale anului. Acest lucru se realizează cu comanda:
SET CENTURY ONIOFF (ON = 2 cifre pentru an) Delimitatorul se poate specifica prin comanda SET MARK TO '.'
DOW(expd) returnează ziua din cadrul săptămânii în care se găseşte data expd ca un număr (1=luni, 2=marti etc).
CDOW(expd) returnează ziua din cadrul săptămânii dar ca şir de caractere (Sunday, Monday,... etc)
DATE() returnează data calendaristrică curentă
DAY(expd) returnează numărul egal cu ziua calendaristică a datei (din cadrul lunii şi indiferent de an).
Exemplu: ? DAY(DATE()) returnează 17 în data de 17.12.98
MONTH(expd) returnează luna reprezentată prin expd (numeric) .
CMONTH(expd) returnează o expresie caracter a lunii respective.
Exemplu: ? month(date()) afişează 12 în data de 17.12.1998
? cmonth(date()) afişează december
GOMONTH(expd,expn) returnează o dată calendaristică plecând de la expd la care se adună algebric expn reprezentând un mumăr de luni.
YEAR(expd) izoleză anul ca valoare numerică.
Exempiu: ?year(date+365) afişează 1999 în data de 17.12.1998
în FoxProW există o serie de funcţii pentru controlul timpului.
TIME([expn) returnează timpul curent ca o expresie caracter sub forma: HH:MM:SS.ZZ
Când expn este prezent se returnează şi ZZ (sutimile de secundă) (ora,minute,secunde). Rezolutia maximă este de 1/18 secunde.
SECONDS() returnează un număr reprezentând milisecundele trecute de la ora 0.
Exemplu: ? seconds() afişeză de exemplu 29683.345
SYS(2) măsoară timpul în secunde trecut de la ora 0 (rezultat în secunde întregi).
Se poate folosi comanda SET CLOCK pentru a menţine pe ecran afişarea timpului. Comanda are două forme:
SET CLOCK ONOFF
SETCLOCK TO[rând,col]
Cu SET CLOCK ON se face ca ceasul să rămână pe ecran. Cu set clock to rind,col se face ca el să apară în pozitia rând,col a ecranului, iar cu set clock to se revine la afişarea implicită (în poziţia 0,60 adică în poziţia stânga sus).
Formatul de afişare al orei este HH:MM:SS xx unde HH reprezintă ora, MM reprezinfâ minutele, SS reprezintă secundele, xx reprezintă am (antemeridian - dimineaţă sau pm postmeridian adică după amiaza).


Cu SET HOURS TO 12|24 se poate modifica forma de afişare de la 12 ore la 24 (fără am şi pm) sau invers.

2.5 Alte tipuri de date

În FoxProW există şi alte tipuri de date. Asupra acestora se va reveni deoarece deocamdată nu există cunoştinţele necesare pentru tratarea lor.
Tipul memo şi tipul general sunt două tipuri asemănătoare şirurilor de caractere. El oferă posibilitatea controlului la nivel inferior al driverelor de imprimantă, caractere, de ecran, al textelor cu lungime variabilă al imaginilor etc, Fox-ul tratându-le ca pe şirurile de caracter.
Funcţiile pentru conversia tipurilor de dată între ele sunt numeroase şi ele sunt necesare pentru că unei variabile nu i se poate schimba tipul atribuit,
DTOC(expd [,1]) transformă data calendaristică într-un şir de caractere.

Dacă este prezent argumentul 1 (opţional), atunci şirul rezultat are forma AAAALLZZ (an,lună,zi) formă utilizată în indexări.
CTOD(expc) transformă un şir în dată calendaristică (dacă are formă de dată calendaristică).
DTOS(expd) este echivalentă cu DTOC(expd,1)
MDY(expd) transformă o expresie dată calendaristică într-un şir de caractere exprimat sub forma MM.DD.YY (lună zi an).
DMY(expd) idem sub forma DD.MM.YY
STR(expn1[,expn2[,expn3]] transformă o expresie numerică într-un şir de caractere.
expn1- reprezintă expresia numerică de transformat
expn2- specifică lungimea totală a şirului de caractere, incluzând punctul zecimal şi partea fracţionară
expn3 - indică numărul de zecimale al numărului.
Dacă lungimea indicată este prea mică se va returna un şir de lungimea indicată conţinând numai asteriscuri. Invers pozitiile în plus se ocupă cu spaţii.
Exemplu:?str(1432.435,12,4) afişează '1432,435' ca şir.
VAL(expc) transformă o expresie şir de caractere într-un număr (dacă expresia începe cu cifre). Dacă nu funcţia returnează 0. Transformarea se face până când primul caracter nu este cifră sau punct zecimal.
Exemplu: ? VAL(' 1432.435 ') afişează 1432.435

În FoxProW există o serie de funcţii referitoare la tipurile de date. În continuare vă prezentăm aceste funcţii deoarece ele îşi au importanţa lor.
TYPE(expr) unde expr este şirul de caractere reprezentând expresia de testat. "nctia returnează un caracter reprezentând tipul variabilei conform tabelului următor:
Caracterul returnat
Tipul expresiei
C
şir de caractere
N
numeric
D
dată calendaristică
L
logic (boolean)
M
memo
G
general
U
nedefinit


Exemplu: ? TYPE('FoxProW') afişează C
EVALUATE(expc) unde expc este o expresie şir de caractere sau dată calendaristică. Funcţia evaluează expresia ca expresie numerică sau şir de caractere şi returnează rezultatul evaluării.
Exemplu; ? EVALUATE('6+3/3+3*3') afişează 16
? EVALUATE('DATE()+1') afişează 18/12/98 dacă comanda este lansată în 17.12.98
EMPTY(expr) returnează .T. dacă valoarea este vidă. Termenul "vidă" este diferit după tipul expresiei folosite şi se poate vedea în tabelul următor:
Tipul datei
Semnificaţia termenului “vidă”
Şir de caractere
Conţine numai spaţii (blank, chr(32), nuluri, tab-uri, chr(9), sfârşit de linie, chr(13), chr(10).
Numeric
Este 0
Dată calendaristică
data vidă / / sau
Logic
.F. (false)
Memo
Fără conţinut
General
Fără conţinut

MIN (expr1,expr2[,expr3]...) şi
MAX(expr1,expr2[,expr3]...) compară cele două expresii (de acelaşi tip) şi retumează valoarea minimă (respectiv maximă) dintre toate cele prezente în listă.
BETWEEN(expr1,expr2,expr3) testează dacă expr1 este cuprinsă între expr2 şi expr3 (inclusiv limitele) şi retumează .T. dacă este cuprinsă între aceste limite şi .F. în caz contrar.
Exemplu: ? BETWEEN(100,120,300) afişează .F.
? BETWEEN(100,50,200) afişează .T
INLIST(expr1,expr2[,expr3]...) testează dacă expresia expr1 este cuprinsă în lista restului de expresii (expr2, expr3 şamd). Ea retumează .T. în caz afirmativ. Expresiile pot fi de orice natură cu condiţia ca toate să aibă acelaşi tip.
Exemplu:? INLIST(joi,luni,marţi,miercuri,joi,vineri,sâmbătă) afişează ,T.

3. VARIABILE ŞI TABLOURI (MASIVE)


Variabilele sunt zone de memorie care iau valori diferite în cursul desfăşurării unui program (spre deosebire de constante).
O variabilă se caracterizează prin trei elemente şi anume:
- un nume (atribuit de programator sau predefinit de sistemul FoxProW şi folosit pentru identificarea variabilei respective;
- conţinutul variabilei (valoarea sa) care este memorată în zona de memorie ataşată variabilei. Valoarea variabilei se poate modifica în cursu! desfăşurării unui program;
- tipul variabilei memorat de asemenea în zona de memorie ataşată.
Referirea ia o variabilă se face prin numele său. De exemplu comanda " ? var va cere afişarea variabilei numită "var" şi ea va avea ca rezultat afişarea acestei variabile (exemplu: 43).
Crearea unei variabile în FoxProW se face prin comanda de atribuire care are sintaxa:
variabilă = expr unde variabilă este numele dat variabilei iar expr este o expresie validă FoxPro de un tip oarecare. Prin acestă comandă variabila ia o valoare egală cu valoarea expresiei iar tipul este acelaşi cu cel al expresiei.
Exemplu: aa = 2.7 variabila numită aa este definită ca variabilă numerică în valoare de 2,7.
? aa va afişa 2.7
O comandă echivalentă cu atribuirea care de asemenea poate fi folosită la definirea unor variabile este STORE cu sintaxa:
STORE expr TO listă variabile
Exemplu: STORE 0 TO a,b,c,d
Variabilele a,b,c, şi d vor lua valoarea numerică 0.
Prin această comandă se poate atribui aceeaşi valoare şi tip mai multor variabile.
Comanda RELEASE eliberează memoria ocupată de variabile acestea nemaifiind utile. Sintaxa ei este:
RELEASE listă variabile sau
RELEASE ALL [LIKE machetă | EXCEPT machetă]
în prima formă comanda realizează "ştergerea" din memorie a tuturor vanabilelor din listă, iar în cea de a doua dacă este utilizată fără opţiuni, atunci realizează eliminarea tuturor variabilelor (şi a masivelor).
Pentru eliminarea doar a unei părti din variabile se folosesc opţiuni:
LIKE machetă - elimină din memorie toate variabilele care se "potrivesc" cu machetă (utilizând caracterele "*" şi "?" pe post de caractere generice) iar EXCEPT machetă - elimină toate variabilele mai puţin cele care se potrivesc cu macheta respectivă.
O tehnică specială de lucru cu variabilele (şi care deschide noi perspective) este macrosubstituţia, prin care conţinutul unei variabile de tip şir de caractere este tratat ca nume al altei variabile sau element FoxProW. Sintaxa macrosubstutuţiei este;
& var [,expc]
- în care var desemnează numele variabilei şir de caractere care va fi substituită cu conţinutul acestei variabile, de exemplu;
a='alfa'
alfa='Salut!'
? & a va afişa Salut!
Macrosubstituţiile nu are voie să depăşească 255 caractere.
În cazul în care este prezentă opţiunea expc în complectarea macrosubstituţiei, aceasta (expresia şir de caractere) se adaugă la variabilă (se va concatena) la variabilă după care se aplică macrosubstitutia.
Exemplu:
a='alfa'
alfa1='Salut! '
?&a.1 va afişa Salut!
Expresia "expc" poate fi la rândul ei o macrosubstituţie dar nu se permite referirea recursivă de tipul:
a='&a'
&a
Pentru afişarea conţinutului variabilelor de memorie se pot fotosi comenzile:
LIST MEMORY [LIKE machetă]
[TO PRINTER |TO FILE fisier][NOCONSOLEj
DISPLAY MEMORY [LIKE machetă]
[TO PRINTER |TO FILE fisier][NOCONSOLE]
Opţiunea LIKE machetă se utilizează dacă se doreşte selectarea numai a unor variabile. Dacă ea nu este utilizată se listează toate variabilele definite în sistem. Listarea se face pe ecranul calculatorului dacă nu se precizează altfel (TO PRINTER dirijează ieşirea la imprimanta sistemului iar TO FILE fis dirijează ieşirea spre fişierul fis) şi pe ecran. Opţiunea NOCONSOLE face ca iistarea să nu apară pe ecran,
Masivele reprezintă tablouri de valori ce pot fi definite şi utilizate global fără a exclude posibilitatea utilizării fiecărui element în parte.
Masivele sunt organizate ca tab!ouri unidimensionale sau bidimensionale deci sub formă de vectori sau de matrice. Comenzile cu care se definesc tablouri sunt DIMENSION şi DECLARE,
Comanda DIMENSION
Format:
DIMENSION array1 (expn1 [,expn2]) [,array2 (expn3[,expn4]])...
          Această comandă stabileşte numele unui tablou şi dimensiunile sale.
array - reprezintă numele tabloului (variabilă tablou)
          expn1 - expresie ce desemnează numărul de elemente pe linie ale tabloului. poate fi o constantă, o variabilă numerică, sau o expresie cu rezultat numeric
               expn2 - expresie ce desemnează numărul de coloane ale tabloului. Are aceaşi exprimare ca şi expn1.
               Expn3 şi expn4 au semnifcaîii identice cu expn1 şi respectiv expn2 pentru array2. Pot fi prezente în comandă un şir de astfel de tablouri, înşiruite unul după altul, separate prin virgulă.
               O comandă identică, cu exact aceeaşi acţiune şi exprimare este comanda DECLARE.
               Exemplu: DIMENSION i(3,4)
               DECLARE x(4,5),y(a,b) - unde a şi b sunt variabile numerice. 
               EXCEPT i înseamnă toate celelalte tablouri definite cu excepţia tabloului i,

Funcţia ADEL()
Acestă functie şterge un etement (dacă tabloul este unidimensional), un rând sau o coloană dintr-un tablou (dacă tabloul este bidimensional).
Format:
ADEL (array, expn[,2])
dacă tabloul este unidimensional expn reprezintă numărul elementului tabloului şters.
dacă tabloul este bidimensional, expn reprezintă numărul rândului şters
2, indică faptul că se ştege o coloană.
Exemplu: ?adel(i,1,2) - este ştearsă coloana 1. Funcţia returnează 1 dacă este reuşită ştergerea,

Funcţia AINS()
Funcţia realizează inserarea de eiemente într-un tablou. Elementele inserate trebuie ulterior iniţializate pentru utilizarea lor. Dimensunile tabloului nu se schimbă.
Format:
AINS(array,expn[,2])
Este o funcţie asemănătoare cu ADEL, semnificatia opţiunilor find aceeaşi.
dacă tabloul este unidimensional expn reprezintă număruf elementului tabloului inserat
dacă tabloul este bidimensional, expn reprezintă numărul rândului inserat
2, indică faptu! că se inserează o coloană,
Exemplu: ?ains(i,1,2) se inserează coloana 1 în tablou. Funcţia retumează 1 dacă inserarea a reuşit.

Funcţia AELEMENT()
Acestă funcţie returnează numărul elementelor din rândul (coloana) cerută.
Format:
AELEMENT(aray,expn1[,expn2])
array - este numele tabloului
expn1 - este numărul rândului (liniei)
exDn2 . este număru! coloanei
Exemplu:?aele(i,1,3)

Funcţia ASUBSCRIPT()
Funcţia returnează numărul elementelor din linie sau coloană. Dacă este un tablou unidimensional returnează numărul elementelor din linie.
Format:
ASUBSCRIPT(array,expn1 [,expn2])
expn1 - numărul elementului
expn2:
1 - returnează numărul elementelor din linie
2- returnează numărul elementelor din coloană
Exemplu: dime i(3,5)
? asubscript (1,15,1) - returnează 3
? asubscript (1,15,2) - retumează 5
Copierea elementelor unui masiv în elementele altui masiv se poate face cu funcţia ACOPY() în felul următor:

Funcţia ACOPY(masiv1,masiv2[,expn1[,expn2[,expn3]]]
Funcţia va determina copierea e!emente!or continute în masiv1 începând de la expn1-!ea element inclus în eiementele masivului numit masiv2, începând de la poziţia expn3. Observăm că referirea la elementele masivului se face printr-un singur indice. Dacă expn1 lipseşte, se presupune valoarea implicită 1.
Pentru a copia toate elementele masivului masiv1 începând de la al expn1-lea element până la sfârşit, în masivui masiv2, vom folosi valoarea -1 pentru expn2.
Când masivul masiv2 nu există, se creează unul cu aceleaşi dimensiuni masiv1 în care sunt copiate elementele acestuia.

Funcţia ADIR(masiv[,expc1 [,expc2]])
determmă încărcarea în masivul "masiv" a informaţiilor despre fişierele din directorul curent, adică numele, mărimea, data şi tipul actualizării, atributele fişierelor respective.
Dacă masivul nu există, el va fi creat la executarea funcţiei, iar dacă există, dimensiunile sale vor fi potrivite pentru memorarea tuturor informaţiilor despre fişierele găsite.
Fişierele pot fi selectate (prin masca expc1, care poate conţine simbolurile * şi ? cu semnificaţia din sistemul de operare DOS).
Coloanele masivului vor avea următorul conţinut:
         Conţinut                 tipul datelor
  1. numele fişierului            şir de caractere
  2. mărimea                      numeric
  3. data ultimei actualizări  dată calendaristică
  4. tipul ultimei actualizări   şir de caractere
  5. atributele fişierului        şir de caractere

          Atributele fişierului vor fi codificate prin caractere ca în tabelul de mai jos:
                                      A Arhivă citire şi scriere (Archieve)
                                      H ascuns (Hidden)
                                      R doar citire (Read Only)
                                      S sistem (Sistem)
                                      D director (Directory)

În cadrul şirului expc1 se poate include o cale completă pentru căutarea fişierelor în alt director şi / sau disc decât cel curent. Expc2 este un şir de caractere care poate conţine unul din codurile specificate mai sus (D, H, şi S) pentru selectarea subdirectoareior, fişierelor ascunse şi respectiv a fişierelor sistem care se potrivesc măştii expc1.
În expc2 se poate folosi codul V care determină încărcarea în masiv doar a etichetei de volum a discului curent, masivul fiind trunchiat după primu! Element.
Exemplu: = ADIR(masiv,'*,prg'.'H') se indică toate programele (*.prg inclusiv cele ascunse).
Dacă expc1 este şirul nul, se vor încărca în masiv doar subdirectoarele, fişierele ascunse sau fişierele sistem, în funcţie de continutul expresiei expc2
Funcţia AFIELDS (masiv) reaiizează încărcarea în masiv a structurii bazei de date curente sub forma:

Col
Continut
Tip
1.
nume câmp
şir de caractere
2.
Tip câmp (C,D,L,M,G,N,F)
şir de caractere
3
lungime câmp
numeric
4.
Număr zecimale
numeric

Dacă masivul nu există, va fi creat un masiv cu acest nume, iar dacă dimensiunile lui nu corespund, ele vor fi ajustate după necesităţi.

Funcţia ASCAN(masiv, expr, [expn1[,expn2[])
În care:
- masiv - reprezintă tabloul în care se caută expresia expr. Funcţia returnează poziţia elementului în care s-a găsit expresia în caz de reuşită sau valoarea 0 în caz contrar.
- expn1,expn2 determină limitarea căutării începând cu elementul expn1 şi terminând cu expn2. Dacă lipsesc atunci se consideră expn1=1 şi căutarea se va facc până la sfârşitu! fişierului.

Funcţia ASORT(masiv [,expn1[,expn2[,expn3]]])
Acestă funcţie sortează elementele masivului în ordine crescătoare sau descrescătoare. Toate elementele sortate trebuie să fie de acelaşi tip pentru a se putee compara între ele.
Pentru masivele unidimensionale vor fi sortate elementele masivului iar pentru cele bidimensionale vor fi sortate liniiie masivului în sensul că se compară două elemente din linii distincte şi funcţie de rezultat sunt schimbate sau nu liniile între ele, fiecare element rămânând pe coloana dinnainte.
expn1 - (dacă există) va determina elementul de început al comparării (în cazul masivelor unidimensionale). în cazul masivelor bidimensionale prima linie ce va intra în sortare va fi cea pe care se află elementul expn1 al masivului şi tot el determină şi coloana de comparat pentru a stabili ordinea liniilor.
expn2 - specifică numărul elementelur sortate (în cazul masivelor monodimensionale) sau numărul liniilor de sortat (la masive bidimensionale). Dacă el lipseşte se consideră valoarea 1 şi sortarea se va executa până la sfârşit.
expn3 - determină ordinea sortării şi anume:
- crescătoare, dacă expn3 lipseşte sau este 0
- descrescătoare, dacă vatoarea expn3 este diferită de 0
Exemplu:
DIMENSION aa(4,5)
bb=asort(aa) && se sortează crescător elementele masivului aa; pe lini criteriul fiind dat de compararea primului element pe linie din; coloana 1.

Niciun comentariu:

Trimiteți un comentariu