Sunteți pe pagina 1din 6

Modul de lucru program

SGBD-ul FoxPro reprezintã un mediu integrat de dezvoltare a programelor utilizator, oferind un editor
de texte pentru scrierea textelor sursã, depanator, compilator şi linkeditor. Se pot folosi ambele tehnici
de programare: atât programarea clasicã, structuratã şi modularã, cât şi programarea orientatã spre
obiecte. Programele sunt văzute ca fişiere de comenzi (*.PRG).
Apelul editorului se face prin comanda MODIFY COMMAND <fis.prg>
Comanda deschide o fereastră de editare, folosită atât pentru crearea cât şi pentru modificarea
programului sursă recunoscut prin numele <fis.prg>. Fişierul rezultat are extensia implicită .prg.
Salvarea se face cu CTRL+W.
Lansarea programului în execuţie (automat se face şi compilarea) se face prin comanda DO
<fis.prg>
Programul este executat până la terminarea fişierului sau pânã la întâlnirea comenzii RETURN, care
determinã revenirea în fereastra de comenzi. Dacã un fişier de comenzi este apelat din alt fişier de
comenzi, spunem cã este subprogram. Nu sunt diferenţe între construirea unui program şi a unui
subprogram. Prin comanda DO se cautã fişierul de comenzi indicat, se deschide, se executã liniile
acestuia, se închide şi se revine în programul apelant sau în fereastra de comenzi. În programe şi numai
în acest context se pot folosi şi comenzile multilinie cum ar fi comanda IF din exemplul urmãtor.

USE ELEVI - deschide o tabelã


IF nume="albu" - test asupra numelui primei persoane
? prenume - comanda de afişare a prenumelui
ENDIF - închide structura

Dacă este necesară fragmentarea comenzii, se va folosi semnul „;“ (punct şi virgulã). Nu există
separatori între comenzi. Lungimea maximă a unei linii de comandă este de 1024 de caractere.
Comentariile sunt introduse într-un program fie prin caracterul asterisc (*) la începutul liniei, fie prin
dublu ampersand (&&) în continuarea comenzii propriu-zise.
FoxPro poate să apeleze comenzi DOS prin comanda ! / RUN
Exemplu
MODIFY COMMAND Salarii - deschide ecranul de proiectare Salarii.prg
DO SALARII - compileazã şi executã Salarii.prg
! DIR - afişeazã lista fişierelor din directorul curent
run erase salarii.prg - apeleazã comanda de ştergere DOS

1. Variabile şi masive
 Gestiunea variabilelor
O variabilã de memorie reprezintã o modalitate prin care FoxPro depoziteazã şi utilizeazã temporar
date într-un program. Variabila de memorie reprezintă o zonă de memorie internă în care se
memorează o dată (de tip character, numeric, logic etc.); atunci când se folosesc într-un program,
variabilele trebuie create, deci li se atribuie un nume, un tip şi o valoare. Numele variabilei este un şir
de caractere alfanumerice. Tipul variabilei este atribuit acesteia odatã cu valoarea.
Atribuirea unei valori într-o variabilă de memorie, se realizează cu operatorul ‘=’ sau prin comanda
STORE.
STORE expr TO var
sau var =expr
Exemple:
1. x = 0
sau STORE 0 to x
2. STORE ‘popescu’ TO alfa
sau alfa = ’popescu’
3. a=0
b=0
sau STORE 0 to a,b

 Tablourile sau masivele de date sunt structuri statice neomogene. Pot avea maxim 2
dimensiuni. Masivele pot fi unidimensionale (se numesc vectori), respective bidimensionale (se
numesc matrici). Crearea unui masiv se face prin atribuirea unui nume şi prin precizarea nr. de
elemente din vector, respective a nr. de linii şi coloane din matrice.
Declararea tablourilor:
DIMENSION / DECLARE < tablou(dim1[,dim2])>,. >
Iniţializarea unui tablou se face odatã cu declararea dimensiunii la valoarea .F. Altã iniţializare globalã
a tuturor elementelor unui tablou se poate face prin comanda STORE.
O matrice se poate redimensiona fãrã ca prin aceastã schimbare sã i se reiniţializeze componentele.

Exemplu:
1. dimension a[2, 2]
store 5 to a - o matrice pătrată 2x2 este iniţializată pe valoarea 5
2. dimension a[3, 3] - redimensionare

 Comenzi de lucru cu variabile


<var>=<expresie> Se atribuie variabilei valoarea expresiei.
/STORE <exp> TO <lista-var> Comanda Store permite atribuiri multiple.
INPUT [<mesaj>] TO <var> Comandă de citire. Variabila primeşte valoarea şi
tipul expresiei introduse de la tastatură.
ACCEPT [<mesaj>] TO <var> Comanda de citire a unei variabile de tip caracter
(defineşte variabila, in mod automat, ca fiind de tip
caracter, indifernt de natura datelor introduse).
@ <r,c> GET<var> [PICTURE <sablon>] Comanda de editare a unei variabile sau câmp al unei
[DEFAULT<exp>][VALID <cond>] READ. tabele la execuţia comenzii READ.
<r,c> specifică poziţia pe ecran a variabilei.
PICTURE specifică un şablon de editare.
DEFAULT este valoarea iniţială.
VALID este condiţia de validare.
? <lista-expresii> AT <col> Permite afişarea expresiilor pe linia curentã,
începând din coloana specificată.
@ <r,c> SAY <exp> Afişează valoarea expresiei <exp>
Începând din punctul <r, c>.
RELEASE <lista_var> / Ştergerea unei liste de variabile sau a tuturor sau a
ALL [LIKE/EXCEPT <sablon>] celor ce verifică un şablon.
SAVE TO <fis.mem> Salvarea pe disc în fişierul .mem a variabilelor.
[ALL LIKE/EXCEPT <sablon>
RESTORE FROM <fis.mem> [ADDITIVE] Restaurarea prin suprascriere sau adăugare a
variabilelor din fişierul .mem în zona de lucru.
WAIT [<mesaj>] [TO <var>] [WINDOWS] Pauză în program cu afişarea unui mesaj (eventual
[NOWAIT] într-o fereastră); tasta apăsată este transmisă
variabilei <var>.
=MESSAGEBOX(<mesaj>) Funcţie pentru afişarea unui mesaj.

 Lucrul cu imprimanta
Sunt disponibile douã comenzi care direcţionează efectul comenzilor de afişare către imprimantă.
Comanda SET PRINTER ON/OFF permite activarea/dezactivarea imprimantei.
Comanda SET DEVICE TO PRINTER/ TO SCREEN direcţionează comanda către imprimantă
sau ecran.
2. Comenzi pentru introducerea formatată a datelor şi pentru afişarea datelor pe ecran
În Visual FoxPro, ecranul este împărţit logic în 25 de linii şi 80 de coloane ; astfel, pot afişate
maxim 2000 caractere pe ecran.
Funcţia ROW() returnează un număr ce reprezintă linia pe care se află cursorul (practic, o
valoare între 0 şi 24). Funcţia COL() returnează un număr ce reprezintă coloana pe care se află
cursorul (practic, o valoare între 0 şi 79).
Comanda SET DISPLAY TO CGA/COLOR/EGA25/EGA43/MONO/VGA25/VGA50
controlează modul de lucru al monitorului.
Grupul de comenzi SAY – GET – READ sunt folosite pentru operaţiile de intrare şi ieşire.

Exemplu:
nume = …..
CLEAR
@10, 10 SAY “introduceti numele dumneavoastra” GET nume
READ
CLEAR
? “salut”, nume, “!”

Comanda SAY are ca efect afişarea datelor pe ecran, la coordonatele precizate prin linie, coloană.
@<linie, coloană> SAY<variabilă> [PICTURE <expC>] [FUNCTION <expC>]

Observaţie: Comanda SAY se foloseşte şi pentru alte operaţii:


Comanda SET DEVICE TO SCREEN controlează afişarea datelor pe ecran.
Comanda SET DEVICE TO PRINTER controlează afişarea datelor la imprimantă.
Comanda SET DEVICE TO FILE <fisier> controlează afişarea datelor într-un fişier.

FoxPro oferă posibilitatea introducerii datelor sub forma unor machete sau formate prin
asocierea la clauza GET a clauzelor PICTURE şi FUNCTION:
@<linie, coloană> GET<variabilă> [PICTURE <expC>] [FUNCTION <expC>] [RANGE
expN1, expN2] [DEFAULT exp] [SIZE expN1, expN2] [VALID expL/expN[ERROR expC]]
Comanda GET stabileşte porţiunea de pe ecran unde vor fi introduce, de la tastatură, valorile ce vor fi
atribuite variabilei <variabilă>; citirea propru-zisă a datelor se face prin comanda READ.

• @ plasează cursorul pe poziţia specificată a ecranului.


• PICTURE şi FUNCTION permit formatarea afişării datelor, fiind folosite pentru formatul de
citire/scriere.
Ambele clauze sunt urmate de un şir de caractere care conţine coduri referitoare la modul de afişare.
• Codurile (clauzele) PICTURE se referă doar la un anumit caracter din formatul de afişare şi anume la
cel de pe aceeaşi poziţie cu cea a codului. Lungimea câmpului de afişare sau de citire este dată de
lungimea şirului din clauza PICTURE.
• Codurile FUNCTION acţionează asupra tuturor caracterelor din formatul de afişare. Codurile clasei
FUNCTION pot fi incluse în şirul de coduri ale clasei PICTURE, cu condiţia ca acestea să fie scrise
primele şi precedate de simbolul @.
• Clauzele PICTURE şi FUNCTION pot acţiona împreună, dar FUNCTION este prioritară.
Clauza SIZE determină dimensiunile regiunii de editare create pe ecran de către comanda GET. Efectul
clauzei SIZE este influenţat de prezenţa clauzei PICTURE în comanda GET, care, de asemenea,
influenţează dimensiunea câmpului de editare.
Clauza VALID realizează testarea completă a corectitudinii noii valori la ieşire. Această clauză acceptă
ca parametru o expresie ce poate fi de tip logic sau numeric.
Clauza RANGE permite limitarea domeniului admis pentru valoarea nou introdusă (mai precis, se
foloseşte pentru a alege ca elemente ale unei liste doar elementele dintr-o anumită porţiune de masiv);
astfel, expN1 desemnează elementul din masiv care se va încărca primul, iar expN2 desemnează
numărul de elemente ale listei ce vor fi preluate din masiv.

• READ determină citirea conţinutelor zonelor de editare pentru introducerea valorilor de la tastatură,
create prin GET.

Observaţii:
- GET şi READ se folosesc obligatoriu împreună, însă READ se scrie pe o singură linie. Comanda
READ se poate folosi o singură dată pentru mai multe comenzi de tip GET.
- Comenzile SAY şi GET se pot scrie atât pe linii diferite, cât si în cadrul aceleiaşi linii de comandă.

Codurile de formatare PICTURE


X Permite orice caracter
9 Cifre şi semnele + - . E (date numerice)
# Cifre, spatii şi semnele + - . E
A Numai litere
W Numai date logice
N Numai litere şi cifre
Y Permite doar caracterele logice Y, y, N şi n
! Literele sunt convertite în majuscule
* Afişează asterix-uri în locul zerourilor iniţiale
. Specifică poziţia punctului zecimal.

Codurile de formatare FUNCTION


A Permit numai caractere alfabetice (litere)
B Aliniere la stânga
I Centrare
J Aliniere la dreapta
C După un număr pozitiv se afişează CR (credit)
D Format dată calendaristică stabilit de SET DATE
E Format dată calendaristică european (britanic)
T Elimină spatiile de început şi sfârşit
X După un număr negativ se afişează DB (debit)
Z Afişează spatii dacă valoarea câmpului este 0
( Numerele negative sunt incluse între paranteze
! Literele sunt convertite în majuscule.

Exemple:
1. citirea unui număr cu două zecimale pe câmp de 7 caractere:
a=0
@10,10 GET a PICTURE '9999.99'
READ
2. citirea oricăror caractere pe câmp de lungime 10:
b=space(10)
@10,10 GET b PICTURE REPLICATE ('X',10)
READ
3. introducere cu majuscule:
b=space(10)
@10,10 GET b PICTURE REPLICATE ('!',10)
READ
4. introducerea unei majuscule şi a două cifre cu centrare:
.....PICTURE 'A99' FUNCTION 'I!'
5. următoarele machete de editare sunt echivalente:
..... PICTURE 'AAAAA' FUNCTION '!'
..... PICTURE 'XXXXX' FUNCTION 'A!'

Activitatea de depanare a programelor


Testarea sau depanarea dezvăluie deficienţele de proiectare şi erorile de scriere, ceea ce pentru
programator înseamnă revenirea la faza de codificare, corectarea erorilor, recompilare, apoi relansarea
în execuţie pentru testare. Primul caz de depanare a avut loc cu mulţi ani în urmă, când o insectă a
provocat defectarea câtorva componente din calculator. A apărut termenul de debugging=depanare,
adică operaţia de scoatere a hibelor (bugs=insecte) dintr-un program. Aplicaţia informatică trebuie
privită ca un ansamblu de componente care, chiar dacă au fost proiectate vizual şi suntem siguri că
sunt corecte, trebuie asamblate şi verificate în interdependenţele dintre ele.
Activitatea de testare este foarte importantă şi este văzută ca o activitate distinctă a procesului de
dezvoltare. Se poate desfăşura conform unui plan. Unii programatori testează aplicaţia doar la final.
Alţii preferă ca pe parcursul proiectării să pună şi problema testării. Sunt două abordări ale procesului
de testare:
a) orientată spre date: nu cunoaştem modul de funcţionare a programului, dar selectăm o gamă largă de
date de test şi rulăm programul cu aceste date, observând dacă sunt obţinute rezultatele, ieşirile dorite.
b) orientată spre funcţia programului: cunoaştem bine funcţia realizată de program şi urmărim trecerea
controlului pe toate căile pe care poate evolua execuţia programului.

Etapele activităţii de testare


a. Pregătirea programului pentru testare:
• verificarea manuală a modului de codificare a programului, urmărind respectarea restricţiilor
metodologice, alegerea notaţiilor standardizate sau semnificative, adoptarea unor formulări clare,
precise, utilizarea comentariilor;
• rularea pe calculator a programelor pentru depistarea şi corectarea erorilor de compilare;
• adăugarea unor secvenţe temporare, care permit controlul derulării programului (mesaje
suplimentare, stocarea rezultatelor intermediare într-un fişier de control etc);
• simularea modulelor lipsă din cadrul structurii programului, fie prin folosirea modulelor vide (nu
execută niciun fel de prelucrare, predând controlul programului apelant imediat ce au fost apelate), fie
prin module de substituţie (module simple cu caracter provizoriu care simulează funcţia modulului
respectiv).
b. Pregătirea datelor de test are o deosebită importanţă, de această operaţie depinzând în bună parte
reuşita testării. Trebuie testate toate ramificaţiile din program şi toate combinaţiile posibile ale
acestora. Există o serie de tehnici care permit generarea fişierelor de test sau programatorul trebuie să
compună fişiere cu datele dorite.
c. Testarea propriu-zisă, adică rularea programului cu datele pregătite pentru test şi verificarea
rezultatelor obţinute prin analiza fişierelor obţinute după prelucrare. Pentru analiza rezultatelor se
pleacă de la aceleaşi date şi se efectuează manual calculele, simulând funcţia programului, pentru a fi
comparate cu ieşirile din program.
d. Testarea de ansamblu vizează asamblarea componentelor şi constituirea datelor de test pentru toate
funcţiunile modulelor programului, testarea propriu-zisă a programului principal şi comunicarea către
şeful de proiect a momentului de terminare a etapei.
Tipuri de erori
a) Erori de sintaxă. Sunt depistate la compilarea programului. Sistemul afişează într-o fereastră de
mesaje eroarea întâlnită.
b) Erori logice. Sunt mai greu de depistat sau de remediat. Nu sunt detectate la compilare, ci la
execuţie. De exemplu:
• operaţia de restaurare Restore chiar dacã folosim clauza Additive poate determina ştergerea vechilor
variabile, dacă au acelaşi nume;
• deşirea capacităţii unui câmp numeric conduce la pierderea valorilor;
• expresii complicate, unde au fost inversate valorile etc.;
• altă eroare greu de detectat survine când lucrăm cu mai multe zone şi pointerul de fişier nu este bine
gestionat.
c) Erori de tip excepţie. Sunt acele situaţii care nu pot fi anticipate la testarea programului. De
exemplu, mutarea unui fişier în alt director sau ştergerea unui index care se face în afara aplicaţiei pot
conduce la părăsirea pe caz de eroare a programului.

Strategii de depanare
Când survine o eroare în timpul execuţiei programului, sistemul afişează o casetă de dialog conţinând
mesajul şi trei butoane: Ignore, Suspend, Cancel.
• Ignore – ignoră eroarea şi continuă programul (este cazul unor erori minore, cum ar fi inexistenţa
unui set de culori).
• Suspend – suspendă execuţia, lasă fereastra de editare deschisă şi cursorul plasat pe linia greşită.
Mediul este lăsat intact. Operatorul încearcă corectarea şi se revine cu comanda RESUME din
fereastra de comenzi. Aceasta reexecută linia de la care a apărut eroarea. Este cazul unei erori mai
grave, cum ar fi lipsa fişierului care trebuie deschis, dar care poate fi corectatã manual, direct. Poate fi
executată o comandă de creare a unei tabele şi apoi se poate reveni. Se pot deschide ferestrele de
depanare Trace, Debug.
• Cancel – anulează execuţia programului, vă plasează în fereastra de editare pe linia greşită.
Utilizarea instrumentului Debugger
Utilitarul Debugger se apelează selectând Tools, Debugger sau prin comanda SET STEP ON din
fereastra de comenzi. Se deschide o fereastră cu un meniu principal, o bară cu butoane pentru
selectarea directă a unor opţiuni, cinci ferestre de lucru, fiecare cu meniuri contextuale.
Principalele ferestre sunt:
Fereastra Trace permite vizualizarea liniilor pe parcursul execuţiei programului. Deschiderea unui
program pentru vizualizare se face prin File, Open sau prin clic pe butonul cu acelaşi nume.
Programul deschis trebuie sã fie rulat în regim de depanare. Fereastra Watch permite urmărirea
valorilor variabilelor, expresiilor. Adăugarea rapidă a unei variabile se face prin poziţionarea pe
variabilã în fereastra Trace şi tragere şi plasare spre fereastra Watch.
Fereastra Call stack permite vizualizarea stivei de apeluri a funcţiilor şi procedurilor folosite în
program.
Fereastra Output este o fereastră specialã în care sunt afişate ieşirile special destinate depanării, prin
intermediul comenzii DebugOut.
Fereastra Local permite urmărirea variabilelor locale unui modul.
Urmărirea execuţiei unui program se poate face prin rularea acestuia linie cu linie şi observarea
efectelor asupra variabilelor, câmpurilor, tabelelor. Compararea valorilor expresiilor cu cele aşteptate
poate să conducă la depistarea erorii. Dacă depistăm o eroare şi închidem fereastra depanatorului,
intrăm în editarea sursei şi facem modificarea.

S-ar putea să vă placă și