Documente Academic
Documente Profesional
Documente Cultură
Setul de caractere
Identificatori
Un identificator este numele dat de programator unui element dintr-un program, care poate fi
o variabilă, o constantă, un tip definit de utilizator, o enumerare, o procedură, o funcţie, un
obiect, o metodă, o proprietate, un control, o formă, un modul sau chiar proiectul însuşi. Un
proiect Visual Basic poate să conţină maxim 32000 identificatori.
Un identificator trebuie să respecte următoarele reguli:
- să înceapă cu o literă sau cu underscore;
- să nu conţină anumite caractere cum ar fi: . %!$&#@;
- dacă începe cu underscore, să fie urmat de un caracter alfabetic sau zecimal;
- numele controalelor, modulelor, formelor şi claselor nu pot fi mai lungi de 1023
caractere;
- numele fisierelor nu trebuie sa fie mai mari de 260 de caractere (inclusiv calea),
iar calea separat trebuie sa aiba mai putin de 248 de caractere;
- numele celorlalte tipuri de identificatori nu trebuie sa depășească 1023 caractere;
- nu trebuie să existe identificatori identici;
- nu pot fi identificatori cuvintele cheie (rezervate) ale limbajului, decât în cazuri
excepție, când sunt declarate între paranteze pătrate (ex: Dim [dim] = 1 ‘s-a declarat
variabila cu identificatorul [dim] și s-a inițializat cu valoarea 1). Cuvintele cheie sunt
identificatori cu semnificaţie fixată, care nu pot fi folosiţi în alt context decât cel precizat
de semantica limbajului. Exemple: Dim, Private, Public, Array , For , Next, If, Then,
Else, End etc.
- există o serie de identificatori standard, definiţi de Visual Basic. O redeclarare a
lor de către programator va duce la nerecunoaşterea sensurilor iniţiale.
Pentru a face codul sursă al programului cât mai lizibil, identificatorii folosiţi ar trebui să
sugereze rolul lor în aplicaţie. De aceea mulţi programatori folosesc prefixe în definirea
identificatorilor care indică tipul de date referit şi scopul lor.
Comentariile mai pot fi utilizate pentru a determina compilatorul să nu mai execute anumite
instrucţiuni, mai ales în faza de testare a programului.
În general în Visual Basic se poate scrie o singură instrucţiune pe o linie. Totuşi, dacă se
doreşte, se pot scrie mai multe instrucţiuni pe o singură linie despărţindu-le cu ajutorul
separatorului de instrucţiuni şi declaraţii care este caracterul : (două puncte).
Exemplu:
Dim a as Integer : a=10
Pe de altă parte, pentru a spori lizibilitatea programelor, dacă o declaraţie sau o instrucţiune
este prea mare, atunci ea se poate scrie pe mai multe linii. Aceasta se realizează folosind
caracterul continuator de linie ( _)( un spaţiu urmat de underscore).
Observaţie:
Facem următoarele convenţii privind formatul comenzilor (instrucţiunilor) Visual Basic:
- Cuvintele scrise îngroşat (Bold) sunt cuvinte cheie, care trebuie folosite ca atare, iar cele
scrise cu caractere normale reprezintă cerinţe, deci elemente care se vor înlocui cu ceea ce se
cere efectiv prin ele.
- Cuvintele scrise între paranteze drepte [] semnifică ceva opţional, care poate fi scris sau
poate lipsi.
- Caracterul / între două cuvinte semnifică faptul că se poate folosi oricare dintre acele
cuvinte în sintaxa comenzii.
Tipul unei date defineşte mulţimea de valori pe care le poate lua o variabilă şi mulţimea de
operaţii care pot fi efectuate cu elementele mulţimii respective. În funcţie de tipul de dată
declarat pentru o anumită variabilă compilatorul alocă o zonă mai mare sau mai mică de
memorie pentru reprezentarea ei.
Fiecare tip de dată permite o serie de operaţii.
Astfel:
- Pentru valorile unui tip întreg se pot face următoarele operaţii: adunarea(+); scăderea(-);
înmulţirea(*); împărţirea întreagă (\); împărţirea reală(/); restul împărţirii întregi (mod); ridicarea
la putere (^).
Sunt permise de asemenea operaţiile relaţionale: mai mic sau egal (<=); mai mic (<); egal
(=); mai mare(>); mai mare sau egal (>=);Rezultatul unor astfel de operaţii este de tip boolean,
având valorile logice True sau False.
- Pentru valorile unui tip real se pot face următoarele operaţii: adunarea (+); scăderea(-);
înmulţirea(*); împărţirea(/); ridicarea la putere (^). Sunt permise şi operaţiile relaţionale
prezentate la tipurile întregi.
- Pentru şirurile de caractere sunt permise operaţia de concatenarea (& sau +) şi operaţiile de
comparaţie (<,<=,=,>=,>).
Prin concatenare două sau mai multe şiruri de caractere pot fi alipite formând un singur şir de
caractere. Cu ajutorul operaţiilor de comparaţie se stabileşte poziţia alfabetică a şirurilor de
caractere;
- Pentru valorile de tip logic, boolean (True şi False) sunt permise următoarele operaţii
logice: negarea logică (Not); şi logic (And); sau logic (Or); sau exclusiv logic (Xor);
echivalenţa logică (simbolul ‘=’); implicaţia logică ((Not A) Or B);
- Pentru tipul de dată de tip obiect este permisă o singură operaţie – cea de comparaţie
(Is).
4.3.1. Constante
unde: cuvintele Public sau Private definesc tipul constantei: Public, dacă poate fi referită în toate
procedurile şi respectiv Private dacă este definită doar pentru procedura curentă.
Const : cuvânt cheie
NumeConstantă – numele atribuit ca identificator constantei respective
As type – defineşte tipul constantei
Expresie – defineşte valoarea sau expresia din evaluarea căreia rezultă valoarea constantei.
Observaţie:
Dacă se specifică direct valoarea constantei, atunci trebuie să reţinem următoarele:
- o constantă de tip numeric sau logic se precizează prin valoarea ei scrisă ca atare;
- o constantă de tip şir de caractere trebuie scrisă între delimitatorii “ “ (ghilimele);
- o constantă de tip dată calendaristică se precizează între delimitatorii # #.
Exemple:
Const PI = 3.14159265358979
Const Nr_zile_lucratoare = 22
Const Zi_de_nastere = #2/4/1981#
Const Nume_aplicatie = ˝Salarii˝
O variabilă reprezintă o locaţie de memorie internă care serveşte pentru stocarea temporară a
datelor şi care se identifică printr-un nume. O variabilă poate conţine orice tip de dată care poate
fi modificat în timpul execuţiei programului.
Tipul variabilelor din Visual Basic sunt: VarianType, Byte, Boolean, String, Integer, Long,
Single, Double, Currency, Date şi Object. Tipul implicit pentru orice variabilă este tipul Object
(nedefinit).
În Visual Basic 6.0, tipul Variant era un tip special de date care putea conţine date
numerice, şiruri de caractere şi date calendaristice, precum şi valorile speciale Null şi Empty. În
Visual Basic 2010 tipul Variant este înlocuit de Object, valorile speciale fiind reprezentate prin
VariantType.Null și VariantType.Empty.
Empty indică faptul că o variabilă nu a fost inţializată şi este egală cu 0 când se referă la
valori numerice sau are lungime nulă când se referă la şiruri de caractere.
Null indică faptul că o variabilă nu conţine nici o dată validă în mod deliberat.
Definirea unei variabile Visual Basic se poate face în două moduri:
- Utilizând operatorul de atribuire: NumeVariabilă=Variabilă;
- Declarând variabilele cu comanda Dim, Private sau Public.
Pentru a utiliza o variabilă de tip Object ea trebuie declarată cu Dim, ReDim, Static, Private
sau Public şi apoi i se asociază un obiect cu instrucţiunea: variabilă=obiect ;
Aşa cum indică şi cuvântul variabilă, valoarea pe care programul o păstrează în aceste locaţii
se poate modifica pe parcursul execuţiei programului. O variabilă poate să stocheze valori
diferite în momente diferite. O variabilă se caracterizează prin cele două elemente:
- numele variabilei, care este un identificator cu ajutorul căruia putem să referim
variabila pe parcursul programului;
- tipul variabilei, care precizează tipul de date care pot fi stocate de variabila respectivă.
În funcţie de tipul variabilei compilatorul alocă o zonă de memorie mai mică sau mai mare
pentru aceasta.
În ceea ce priveşte variabilele de memorie, Visual Basic permite utilizarea a două feluri de
variabile:
- variabile cu tip
- variabile fără tip.
Folosirea variabilelor fără tip de date (prin utilizarea tipului implici Variant) a devenit
deosebit de importantă. Tipul Variant conţine nu numai variabila, dar şi informaţii despre
variabilă.
Declararea unei variabile înseamnă practic a defini de la început informaţiile necesare
programului despre variabila respectivă, astfel încât programul să ştie cum se numeşte, ce tip de
date poate stoca, ce zonă de memorie trebuie să-i aloce şi unde.
Exemple:
Dim i as Integer ´ defineşte variabila locală i de tip Integer
Dim ZiSalar as Date ´ defineşte variabila locală ZiSalar de tip Date
Private Nume as String ´ defineşte variabila locală Nume de tip String
Public ListaPreturi as ListBox ´ defineşte variabila ListaPreturi ce va conţine o ´referinţă
către un obiect de tip ListBox.
Observaţie:
Se recomandă folosirea comenzii Dim doar pentru declararea acestui tip de variabile, chiar
dacă Visual Basic permite utilizarea ei şi în alte contexte.
Un alt tip de variabile îl reprezintă cele cu domeniu de vizibilitate la nivelul unui modul.
Aceste variabile pot fi folosite oriunde în interiorul modulului în care au fost declarate. Ele există
atâta timp cât este folosit modulul respectiv. Se recomandă ca declararea lor să se facă cu
ajutorul comenzii Private în loc de Dim.
Un alt tip de variabile îl reprezintă variabilele publice sau globale, vizibile la nivelul
întregului program. Acestea pot fi folosite oriunde în program, au un domeniu de valabilitate
global şi există atâta timp cât se execută programul. Variabilele globale se declară utilizând
comanda Public în zona General Declaration.
Pe lângă acestea, un alt tip de variabile sunt cele statice. Acestea pot avea un domeniu de
valabilitate locală sau la nivelul unei proceduri, dar o durată de existenţă permanentă. Declararea
lor se face cu ajutorul comenzii Static. De exemplu se poate defini o variabilă statică la nivelul
unei proceduri. Ea va fi vizibilă doar la nivelul acelei proceduri, dar îşi va păstra valoarea şi după
ce procedura îşi va termina execuţia. Dacă procedura va fi din nou apelată, variabila statică nu va
fi iniţializată automat de Visual Basic, aşa cum se întâmplă cu variabilele care nu sunt statice, ci
va avea valoarea pe care a avut-o la ultima ei folosire.
Diferenţa dintre variabilele declarate cu Dim şi cele declarate cu STATIC constă deci în
durata de viaţă a variabilelor. Astfel, cele declarate cu static nu se modifică şi nu îşi pierd
valoarea stabilită pe parcursul execuţiei programului la o nouă reluare a acestuia..
Variabilele locale la nivelul unui modul sau publice (globale) se declară în secţiunea de
declaraţii a modulului ( Declarations).
Declararea variabilelor se poate face în Visual Basic în două moduri :
- implicit
- explicit.
În modul implicit o variabilă este considerată declarată la prima ei folosire. Nu este necesară
o declarare prealabilă cu ajutorul cuvintelor cheie Dim, Private, Public. În mod implicit Visual
Basic declară toate variabilele de tip Object.
Declararea explicită a variabilelor presupune ca înainte să fie folosită, o variabilă să fie
declarată cu ajutorul uneia dintre comenzile Dim, Private, Public.
Observaţie:
Se poate scrie la începutul modulului opţiunea Option Explicit sau se poate cere mediului de
programare să facă acest lucru automat selectând din meniul Tools -Options…- Projects and
Solutions –VB Defaults opţiunea Option Explicit. În acest caz Visual Basic ne va atenţiona
dacă folosim o variabilă pe care nu am declarat-o anterior. Este o opţiune deosebit de utilă şi se
recomandă pentru a evita greşelile legate de scrierea numelor variabilelor.
Notă:
Una dintre cele mai frecvente probleme întâlnite la declararea unei variabile este următoarea:
Dim a,b,c As Integer,d As Decimal,e As Char,f,g As String,h
Ne întrebăm ce tip de variabilă este fiecare după declarare. Avem următoarele rezultate:
a,b și c sunt de tip Integer, tip ce nu necesită inițializare explicită;
d este de tip Decimal;
e este de tip Char;
f și g – în cazul acestor variabile, pentru a fi de tip String, este obligatorie inițializarea
după declarare, altfel f și g sunt recunoscute ca fiind de tip Object;
h prin omiterea tipului de date la declarare, Visual Basic îi acordă tipul implicit, tipul
Object.
Semnul egal din aceste exemple este operator de atribuire şi nu operator de egalitate.
Când creem o variabilă, Visual Basic îi atribuie în mod implicit o valoare în funcţie de tipul
variabilei ; spunem că o iniţializează automat.
Adeseori, în cadrul unui program sunt necesare prelucrări asupra variabilelor care impun
conversia tipurilor acestora. Astfel, vom întâlni situaţii în care vom dori să atribuim unei
variabile de un anumit tip o valoare de alt tip, lucru care în mod normal nu este posibil. De aceea
va trebui să facem o conversie a valorii pe care dorim să o atribuim la tipul variabilei. În unele
cazuri Visual Basic execută în mod automat aceste conversii de date, dar bine este să realizăm
noi aceste conversii utilizând funcţiile de conversie.
Exemplu:
Când am lucrat cu controale de tip TextBox pentru a efectua şi a afişa diverse calcule am
utilizat funcţiile de conversie VAL şi STR:
Text1.text = Str(val(text2.text) +val(text3.text))
Visual Basic mai conţine şi alte tipuri de date, dar mai puţin utilizate.
Observaţie:
Pentru a utiliza o dată, o variabilă de un anumit fel, ea trebuie declarată cu una dintre
instrucţiunile: PRIVAT, PUBLIC, DIM sau STATIC.
Visual Basic permite modificarea numărului de elemente al unei variabile de tip tablou cu
comanda: REDIM. Atenție, această comandă nu permite și modificarea numărului de
dimensiuni.
Prin urmare, în mod normal şi pentru a evita situţii imprevizibile, orice variabilă Visual Basic
trebuie declarată cu instrucţiunile DIM sau PRIVAT, PUBLIC, STATIC. După ce s-a făcut
declaraţia, acestei variabile i se poate atribui o valoare.
Asocierea unui obiect la variabila declarată se face apoi cu instrucţiunea:
variabilă = obiect.
La declararea variabilelor de tip obiect, trebuie folosite clasele specifice aşa cum sunt
enumerate ele în object browser şi nu cu titlul generic object.
Exemplu:
Dim Puncte(4) As Integer
Observaţie:
Când se declară un tablou primul element are numărul de ordine 0.
Exemple:
Dim a( 0 To 10) As Double
Dim b (0 To 100) as Date
Observaţie:
Visual Basic 2008 nu permite modificarea limitei inferioare, aceasta fiind mereu 0. De aceea,
la declarare se poate omite specificarea limitei inferioare.
Tablourile dinamice sunt tablourile care au un număr variabil de elemente. Există situaţii
când nu ştim de câte elemente avem nevoie în tabloul nostru. Şi pentru a nu aloca un spaţiu prea
mare sau prea mic de memorie, Visual Basic ne oferă posibilitatea să redimensionăm tabloul în
funcţie de necesităţi. Pentru a crea un tablou dinamic acesta trebuie declarat fără dimensiune:
Apoi, în funcţie de câte elemente avem nevoie le alocăm cu ajutorul instrucţiunii ReDim, a
cărui sintaxă este:
Instrucţiunea ReDim poate fi folosită numai în interiorul unei proceduri. Este utilă pentru a
modifica numărul de elemente maxime al unei dimensiuni a variabilei tablou, fără a putea
schimba numărul de dimensiuni sau tipul datei.
Exemplu:
Dim Salarii() As Integer
În toate exemplele prezentate până acum, tablourile au constat într-un singur rând de date (o
singură dimensiune). Totuşi, limbajul Visual Basic acceptă tablouri bi-, tri şi multi-
dimensionale.
Exemplu:
Dim A(0 to 100,0 to 100) As Integer - defineşte o matrice (deci un tablou bidimensional) de
101 linii şi 101 coloane cu elemente întregi.
Adeseori în practică apar situaţii când dorim ca o singură variabilă să stocheze mai multe
informaţii de tipuri diferite, dar aflate în strânsă legătură. Pentru aceaste cazuri Visual Basic ne
permite să creem tipuri de date definite de utilizator.
În aceste cazuri utilizatorul poate defini în cadrul modulului său şi tipuri de date proprii, deci
tipuri de date predefinite. Pentru aceasta, declaraţia de tip se face de către programatori în
secţiunea General Declaration a modulului de cod cu ajutorul instrucţiunii:
STRUCTURE ( nume_tip_nou )
Definire Variabile
END STRUCTURE
După definirea noului tip de date, se poate declara o variabilă de acest tip prin acelaşi
procedeu întâlnit şi la declaraţia variabilelor în tipurile prestabilite.
O variabilă nu poate avea decât o singură valoare la un moment dat, în momentul unei noi
atribuiri ea pierzând valoarea stocată anterior.
Aceste tipuri de date sunt compuse dintr-un număr de componente numite câmpuri. Spre
deosebire de tablouri, câmpurile pot conţine tipuri de date diferite. Fiecare câmp are deci un
nume (numit identificator de câmp) şi un anumit tip. Sintaxa unui tip definit de utilizator este
următoarea:
Exemplu:
Private Structure InfoStudent
Public nume As String
Dim DataNaşterii As Date
Dim Sex As String
Private MediaAdmitere As Single
Private MediiSemestriale() As Integer
Dim Adresa As String
End Structure
În exemplul anterior am creat un tip de date definit de utilizator denumit InfoStudent. Putem
defini apoi variabile locale, la nivel de modul sau variabile globale de tipul respectiv.
Exemple:
Dim student As InfoStudent
Dim StudentiInformatica (70) As InfoStudent
Atribuirea sau recuperarea de valori stocate în câmpurile acestor variabile se face exact ca în
cazul proprietăţilor controalelor sau a formelor.
Exemple:
student.Nume = ”Munteanu Răzvan”
student.DataNasterii = #6/21/1990#
Exemplu:
Private Enum ZileS
Luni = 0
Marţi
Miercuri
Joi
Vineri
Sâmbătă
Duminică
End Enum
Observaţie:
Declararea unui tip enumerare nu se face la nivel de procedură.
După ce am creat un tip enumere, ca şi în cazul tipurilor definite de utilizator, putem defini o
variabilă de tip enumerare. Această variabilă va putea să ia ca valoare doar elementele din
enumerare.
Exemplu:
Dim ZiSăptămână As ZileS
ZiSăptămână = ZileS.Miercuri
4.4. OPERATORI
Operatorii reprezintă comenzi speciale pentru operaţiile ce pot fi executate cu datele din
program. Visual Basic pune la dispoziţie 4 tipuri de operatori:
Observaţie:
Operaţiile ce se efectuează în cadrul expresiilor trebuie să aibă sens din punct de vedere
matematic. Exemplu, la împărţire numitorul să nu fie 0 (zero).
c). Operatori de comparare - compară două numere sau şiruri de caractere şi returnează
valoarea true sau false. Operatorii de comparare sunt cei uzuali: < (mai mic), <= (mai mic sau
egal), > (mai mare), >= (mai mare sau egal), = (egal), <> (diferit, neegal).
Rezultatul este True - dacă relaţia este adevarată, False - dacă relaţia este neadevărată şi
Nothing ( vbNull sau dbNull, in functie de caz. ) - dacă cel puţin un operand este Nothing(vbNull
sau dbNull).
Relaţiile care există între diferite tipuri de entităţi se pot evidenţia prin comparaţii având una
dintre formele următoare:
rezultat = expresie1 operator expresie2
rezultat = object1 Is object2
rezultat = string Like pattern
unde:
rezultat este o variabilă de tip logic
expresie este o expresie oarecare
operator este un operator relaţional
object1, object2 sunt nume de obiecte
string este o expresie de tip şir de caractere oarecare
pattern este o expresie String sau un domeniu de caractere.
Operatorul Is produce True dacă variabilele se referă la acelaşi obiect şi False în caz contrar.
Operatorul Like compară două şiruri cu observaţia că al doilea termen este un şablon. Prin
urmare rezultatul este True dacă primul şir operand este format după şablon, False în caz contrar.
Atunci când un operand este Nothing, rezultatul este tot Nothing.
Comportarea operatorului Like depinde de instrucţiunea Option Compare, care poate fi:
Option Compare Binary, ordinea este cea a reprezentării interne binare,
determinată în Windows de codul de pagină.
Option Compare Text, ordinea este determinată de setările locale ale sistemului.
Construcţia şablonului poate cuprinde caractere speciale, liste de caractere, domenii de
caractere, cu următoarea semnificaţie:
? semnifică un caracter oarecare pe poziţia pe care apare;
* orice caracter şi oricâte caractere se pot afla pe poziţia respectivă;
# o cifră oarecare (0–9).
[charlist] oricare dintre caracterele enumerate în listă, un domeniu de litere poate fi dat prin
utilizarea cratimei.
[!charlist] orice caracter care nu este în listă
Funcţia InputBox
Apelul funcţiei InputBox afişează o casetă de dialog care conţine un mesaj, două butoane
(OK şi Cancel) şi o zonă text în care se poate tasta un răspuns (de tip String, chiar dacă se
transmite o valoare numerică). Textul introdus este transmis ca valoare a funcţiei la acţionarea
butonului OK sau Enter, iar acţionarea butonului Cancel (ca şi închiderea dialogului ca fereastră)
transmite un şir de lungime zero, indiferent de valoarea zonei text.
Funcţia MsgBox
Un dialog mai simplu decât InputBox este realizat prin forma predefinită afişată de funcţia
MsgBox. Se afişează un mesaj într-o casetă de dialog şi se asteaptă ca utilizatorul să acţioneze
unul dintre butoanele existente (numărul şi tipul lor este fixat la proiectarea aplicaţiei). Funcţia
returnează o valoare întreagă, indicând astfel care buton a fost acţionat. Sintaxa este:
Valorile 0-5 descriu butoanele, 16,32,48 şi 64 descriu stilul icoanei afişate, 0, 256 şi 512
determină butonul implicit, iar ultimul grup (0 şi 4096) determină modalitatea casetei de dialog.
La formarea argumentului Buttons se va aduna doar câte un număr din fiecare grup.
Butoanele pot fi: OK, Cancel, Abort, Retry, Ignore, Yes sau No.
Valorile returnate de funcţie şi care pot fi testate, în expresii logice, pentru a alege ramura de
prelucrare dorită de utilizator sunt:
Constanta Valoa Descri
re ere
OK 1 OK
Cancel 2 Cancel
Abort 3 Abort
Retry 4 Retry
Ignore 5 Ignore
Yes 6 Yes
No 7 No
Acţionarea tastei Esc este echivalentă cu acţionarea butonului Cancel (dacă acesta este
prezent). Dacă în dialog este prezent butonul Help, acţionarea lui nu termină dialogul.
obiectul Font definește un format particular pentru text, cum ar fi dimensiunea, familia
de fonturi, atribute de stil, etc. Cea mai simplă sintaxa pentru constructorul unui obiect
Font este:
Font(numele_fontului As String, dimensiunea As Single)
Brush definește obiectele ce realizează umplerea formelor de tip grafic sau text. De
menționat, această clasa nu poate fi instanțiată, în schimb se pot crea instațe pe baza
claselor derivate SolidBrush, TextureBrush și LinearGradientBrush. Un exemplu de
instațiere este următorul:
Dim brush1 As New SolidBrush(Color.Blue)
x și y sunt reprezintă coordonatele punctului extrem stanga-sus al șirului de caractere
afișat. În sintaxa, x și y se pot înlocui cu un obiect de tip Point sau RectangleF. Acestea
din urmă, trebuiesc declarate în prealabil utilizării.
Un obiect de tip Point are două proprietăți esențiale, X și Y.
Exemplu de utilizare:
Dim punct As Point‘ se declară o variabila de tip Point
punct.X=100 ‘ se inițializează proprietarea X cu 100
punct.Y=150 ‘ se inițializează proprietarea Y cu 150
În momentul în care este folosit în cadrul unor forme, controllere, obiecte de tip
Graphics, rolul instanței de tip Point va fi plasarea ”cursorului” la coordonatele (100,150)
Obiectul RectangleF reține patru valori: X -coordonata x a punctului de plecare,Y-
coordonata Y a punctului de plecare,Width -lățimea, Height -înălțimea;
StringFormat încapsulează informații legate de formatarea șirului de caractere
(aliniamentul, orientarea, numărul de caractere dintr-un Tab, etc).
Exemplu:
Presupunem că variabila Nume conţine numele complet al unei persoane (nume şi prenume).
Dorim să extragem numele de familie. Vom proceda astfel:
strSpaţiu=˝ ˝
lngNrCaracter=InStr(Nume,strSpaţiu)
NumeFam=Microsoft.VisualBasic.Left(Nume,lngNrCaracter)
De asemenea putem folosi funcţia format pentru a stabili modul de afişare al valorilor
numerice.
Pe lângă şabloanele standard oferite de valorile predefinite ale parametrului Format_String
ne putem crea propriile şabloane în funcţie de necesităţi.
IsNumeric() - Determină dacă argumentul are o valoare care poate fi convertită într-un
număr valid.
IsDate() - Determină dacă argumentul poate fi convertit într-o dată validă.
isNullOrEmpty() – Determină dacă argumentul are o valoare nulă sau dacă a fost
inițializat cu orice valoare de la definirea sa originală. Este utilizabil doar pentru variabilele de
tip String.
isNothing() – Determină dacă argumentul are valoarea implicită a tipului de date (în cazul
tipurilor de date valoare) sau dacă argumentul nu are o instanță atribuită (în cazul tipurilor de
date obiect și pointer).
VarType() – Determină tipul argumentului. În tabelul următor se prezintă valorile
returnate de funcţia VarType
Tabel Valorile returnate de funcţia VarType()
Constanta Valoare Semnificaţie
vbEmpty 0 Neinițializată (default)
vbNull 1 Nu conține date valide
vbInteger 3 Tip Integer
vbSingle 4 Tip Single
vbDouble 5 Tip Double
vbDate 7 Tip Date
vbString 8 Tip String
vbObject 9 Object
vbError 10 Tip Error
vbBoolean 11 Tip Boolean
vbVariant 12 Variant
vbDataObject 13 Data access object
vbDecimal 14 Tip Decimal
vbByte 17 Tip Byte
vbLong 20 Tip Long
vbArray 8192-8207 Array. Variază în funcție de tipul de date al tabloului (ex.
Tablou de tip Integer returnează valoarea 8192 + 2 = 8194)
h). Funcţii pentru lucrul cu date calendaristice
IsDate (expresie) - verifică dacă o expresie şir de caractere sau de tip dată reprezintă o dată
calendaristică validă.
TimeOfDay() – serveşte pentru a obţine ora din sistem,
Today() – serveşte pentru a obţine data sistemului
Now() – serveşte pentru a le obţine pe amândouă (data şi ora).
CStr (TimeOfDay()) – transformă ora în şir de caractere;
CStr (Today()) – transformă data calendaristică în şir de caractere;
CStr (Now()) – transformă data şi ora în şir de caractere:
Am prezentat anterior funcţia Format care este folosită în primul rând pentru a afişa timpul
şi data.
O funcţie este un modul program care efectuează o anumită sarcină şi returnează o valoare
identificată prin numele funcţiei.
Exemplu:Valreturn = nume_funcţie([listă parametri)]
Pentru ca un program Visual Basic să fie mai uşor de scris, de modificat sau de înţeles,
trebuie împărţit în entităţi logice numite proceduri. O procedură este o secvenţă de instrucţiuni
executate ca un tot unitar sau partajabile.
O procedură poate fi folosită de mai multe ori în acelaşi program, accesarea sa fiind făcută
prin menţionarea numelui ei în codul programului la momentul potrivit. Există trei tipuri
proceduri:
- Sub – execută o anumită secvenţă de comenzi.
- Function
- Tip de proprietate
Sintaxa generală a unie proceduri este :
Private/Public/Static/Sub
………………………
End Sub.
O procedură eveniment devine activă atunci când e apelată de utilizator sau de program în
mod automat.
O procedură funcţie este o procedură care realizează o anumită funcţie şi returnează o
anumită valoare identificată prin numele funcţiei. Utilizatorul poate crea singur procedurile
folosind proprietatea FUNCTION.
Procedurile tip proprietate – pot returna şi atribui valori şi pot stabili referinţe la obiecte.
Conceperea şi apoi scrierea unui program trebuie realizată modular, prin împărţirea acestuia
în module (subprograme) relativ independente. De altfel realizarea unui program de mare
complexitate impune organizarea unor date şi a acţiunilor la care acestea trebuie spuse în
subprograme. În Visual Basic există un mecanism evoluat de declarare şi utilizare a
subprogramelor.
În Visual Basic subprogramele sunt de tipuri:
- proceduri
- funcţii.
Procedurile sunt blocuri de cod constituite din instrucţiuni, date locale şi alte subprograme.
Acestea pot fi utilizate în cadrul altor programe sau a altor subprograme pentru a îndeplini o
anumită sarcină.
În Visual Basic procedurile sunt două tipuri:
- proceduri generale
- proceduri eveniment.
Procedurile generale sunt blocuri de cod (instrucţiuni) prin care se transmite aplicaţiei cum
trebuie să îndeplinească o anumită sarcină. O dată creată, o procedură generală trebuie apelată în
mod explicit în cadrul aplicaţiei pentru a se executa codul (setul de instrucţiuni) pe care aceasta îl
conţine.
Procedurile eveniment sunt blocuri de cod (instrucţiuni) asociate diferitelor evenimente
recunoscute de un obiect (control sau formă) şi care se execută în momentul în care se produce
evenimentul respectiv.
De exemplu, cmdButton_Click() este procedura aferentă evenimentului Click de mouse al
butonului cmdButton. Aceasta îşi va începe execuţia în momentul în care utilizatorul va apăsa
butonul cmdButton.
Numele unei astfel de proceduri este format din numele obiectului aferent, caracterul _ şi
numele evenimentului ce-i declanşează execuţia.
Sintaxa definirii unei proceduri:
[Private|Public][Static] Sub NumeProcedură (listă_parametri_formali)
Instrucţiuni
End Sub
Observaţie:
O procedură eveniment poate fi definită doar Private.
Procedurile comunică date cu programul apelant cu ajutorul parametrilor.
Exemplu:
Să se scrie o funcţie care să calculeze aria unui cerc cu raza dată iRaza.
Private Function ArieCerc(iRaza As Integer)
ArieCerc=3.14*iRaza^2
End Function
Pe lângă funcţiile pe care le vom crea noi în cadrul aplicaţiilor, se pot utiliza o serie de funcţii
standard oferite de bibliotecile Visual Basic, cum sunt: funcţiile matematice, funcţiile de
prelucrare a şirurilor de caractere, funcţiile financiare, etc.
După ce am scris o funcţie sau o procedură, cu siguranţă că vom dori să o apelăm dintr-un
program sau un subprogram. Apelarea procedurilor diferă de apelarea funcţiilor. În timp ce
funcţiile returneză un rezultat şi pot fi apelate din cadrul unei expresii, apelurile de procedură
sunt instrucţiuni liniare de sine stătătoare.
Apelarea unei proceduri se poate face în două moduri, cu sintaxa:
NumeProcedură listă_parametri_actuali
sau
Call NumeProcedură(listă_parametri_actuali)
Exemplu:
Presupunând că există declarată o procedură care calculează suma a două numere cu numele
Adună, ea poate fi apelată astfel:
Adună x, y
sau
Call Adună(x,y)
De cele mai multe ori procedurile şi funcţiile trebuie să schimbe informaţii cu programele care
le apelează. Procedurile pot primi date de la programul apelant şi pot returna date programului
apelant prin intermediul parametrilor formali ai procedurii. Parametrii formali se caracterizează
prin:
- un parametru formal apare ca un identificator; acestuia i se asociază un tip de dată;
- parametrii formali declaraţi într-o procedură sunt cunoscuţi în întregul text al procedurii
şi necunoscuţi în afară;
- în cadrul procedurii parametrii formali se manifestă ca nişte variabile de tipul respectiv;
- dacă lista parametrilor formali este vidă, atunci nu există schimb de informaţii cu restul
programului sau acesta se realizează prin intermediul variabilelor globale.
În Visual Basic se pot defini mai multe tipuri de parametri formali:
- parametri transmişi prin valoare;
- parametri transmişi prin referinţă;
- parametri opţionali;
- listă cu număr nedefinit de parametri.
Elementele transmise ca parametru pot fi variabile sau invariabile. Pentru parametrii
invariabili nu se vor propaga modificările în blocul apelant, chiar dacă se specifică transmisia
prin referință. Adică, parametrii sunt preluați în procedura lansată, se pot modifica, dar acele
modificări sunt vizibile doar local (în procedura lansată cu acei parametrii) și dispar odată cu
încheierea procedurii. Tabelul următor prezintă elementele variabile și invariabile din Visual
Basic.
Parametri transmişi prin valoare sunt parametri impliciţi pe care îi foloseşte Visual Basic.
Pentru o mai bună lizibilitate a programului se poate folosi cuvântul cheie ByVal înaintea unui
parametru pe care dorim să-l transmitem prin valoare. Aceşti parametri pot fi modificaţi în
interiorul procedurii, dar valorile noi nu se transmit către blocul apelant, sunt doar parametri de
intrare.
Parametri transmişi prin referinţă sunt precedaţi de cuvântul cheie ByRef. Aceşti parametri
sunt elemente variabile. Ei pot fi modificaţi în interiorul procedurii, rezultatul răsfrângându-se și
asupra variabilelor din blocul apelant. Nu sunt transmişi prin valoare, ci se transmit prin adresa
lor.
O mențiune privind modul de transmisie a valorilor și performanța procedurilor: la
transmiterea prin referință se copiază doar un pointer de 4 bytes către variabilă sau către
începutul tabloului, structurii sau obiectului. În contrast, la transmiterea prin valoare, se copiază
întreg conținutul obiectului trimis ca parametru.
Modul de tratare a tipurilor de date atunci când sunt transmise ca argumente prin referință și
valoare este prezentat în următorul tabel:
Tipul de dată Argument ByVal Argument ByRef
Variabilă care Procedura nu poate Procedura poate
stochează o singură schimba variabila sau schimba variabila și
valoare oricare din membrii săi membrii săi
Variabilă de tip Procedura nu poate Procedura poate
referențial (conține un schimba variabila, dar schimba variabila și
pointer către o instanță poate schimba membrii membrii săi.
de clasă, un tablou sau instanței indicate de
un pointer către o pointer. Pentru o
instanță de tip structură. variabilă tablou(array),
poate fi modificată
valoarea elementelor
din tablou, dar nu se
modifică variabila
tablou, de exemplu,
prin redeclarare sau
atribuirea unui alt
tablou.
Parametrii opţionali sunt precedaţi de cuvântul cheie Optional. Dacă vom declara un
parametru opţional, atunci toţi parametri din sublista de parametri formali care urmează după
acel parametru trebuie să fie declaraţi ca opţionali. Dacă vom declara un parametru ca opţional în
momentul în care programul apelează procedura, nu este necesar să se transmită o valoare
parametrului declarat opţional.
Există situaţii în care nu se ştie exact numărul de parametri care se transmit procedurii.
Folosind cuvântul cheie ParamArray se pot transmite procedurii apelate un număr nedefinit de
parametri.
Există situaţii în care procedurile şi funcţiile îşi îndeplinesc sarcina pe care o au fără să execute
toate instrucţiunile din corpul procedurii sau funcţiei respective. Pentru astfel de situaţii se pot
utiliza instrucţiunile Exit Sub şi Exit Function care determină terminarea forţată a execuţiei
procedurii sau funcţiei, chiar dacă nu s-a executat ultima linie de instrucţiune a acesteia.
Instrucţiunea Let
Atribuie valoarea rezultată din evaluarea unei expresii la o variabilă sau proprietate.
Instrucţiunea are sintaxa:
unde:
numevar este numele variabilei sau al proprietăţii căreia i se atribuie o valoare.
expresie este expresia din evaluarea căreia rezultă valoarea ce se va atribui variabilei
precizate (în partea stângă a semnului =).
Se observă că Let este opţional, deci poate lipsi din comandă. De fapt instrucţiunea de
atribuire se foloseşte aşa în cele mai multe cazuri.
Observaţie.
Valoarea expresiei trebuie să fie compatibilă ca tip cu variabila (sau proprietatea): valori
numerice nu pot fi atribuite variabilelor de tip String şi nici invers.
Variabilele Object pot primi valori numerice sau String, reciproc nu este valabil decât dacă
valoarea expresiei Object poate fi interpretată compatibilă cu tipul variabilei. Astfel, orice Object
poate fi atribuit unei variabile de tip String (cu excepţia Null). Doar Variant care poate fi
interpretat numeric poate fi atribuit unei variabile de tip numeric.
La atribuirea valorilor numerice pot avea loc conversii la tipul numeric al variabilei.
Atribuirea valorilor de tip utilizator poate fi efectuată doar dacă ambii termeni au acelaşi tip
definit.
Observaţie:
Pentru legarea de obiecte la variabile obiect nu se poate utiliza instrucţiunea de atribuire Let
(cu sau fără cuvântul Let), ci se va utiliza instrucţiunea Set.
Instrucţiunea LSet
Copiază, cu aliniere la stânga, şirul de caractere specificat ca atare sau valoarea expresiei din
dreapta într-o variabilă de tip String specificată în stânga semnului =. Deoarece copierea este
binară, poate fi utilizată pentru atribuiri între tipuri utilizator diferite (rezultatul este imprevizibil
deoarece nu se face nici o verificare de tipuri/componente ale valorilor de tip record).
Sintaxa este:
varstring = LSet(string, dimensiune_sir_dorita)
unde:
varstring şi string reprezintă variabila de tip String şi respectiv expresia de acelaşi tip
implicate într-o atribuire de valori de tip string.
Conţinutul zonei de memorie alocată celei de a doua variabile este copiată, cu aliniere la
stânga, în zona de memorie a primei variabile.
La atribuire se respectă regulile cunoscute pentru transferul datelor în alte limbaje de
programare, cum sunt: caracterele care rămân neocupate se completează cu spaţii, iar dacă zona
sursă (de unde se copiază) este mai mare, caracterele din dreapta se pierd (datele sunt trunchiate).
Instrucţiunea RSet
Copiază, cu aliniere la dreapta, şirul de caractere specificat ca atare sau valoarea expresiei din
dreapta într-o variabilă de tip String specificată în partea stângă a semnului =.
Sintaxa comenzii este:
Terminarea execuţiei unui program sau oprirea temporară a acestuia (pauza) se pot realiza
prin instrucţiunile: DoEvents, End, Exit, Stop.
Procedura DoEvents
Deşi nu este practic o instrucţiune Visual Basic ci o procedură, includerea ei este naturală
prin aceea că permite cedarea controlului către sistemul de operare, care poate astfel sa
funcţioneze în regim de multitasking. Acţiunea poate fi realizată şi prin alte tehnici (de exemplu
utilizarea unui Timer etc.). Sintaxa este:
DoEvents( )
Controlul este redat programului după ce sistemul de operare a terminat procesarea
evenimentelor din coada de evenimente, ca şi procesarea tuturor caracterelor din coada
SendKeys.
Instrucţiunea End
Această instrucţiune termină execuţia unei proceduri sau indică sfârşitul codului unei
structuri de tip bloc (cum ar fi End Function, End If etc., prezentate la structurile respective).
În cazul opririi execuţiei unei proceduri sintaxa instrucţiunii este:
End
Prin aceasta instrucţiune, care poate fi plasată oriunde în program, execuţia este terminată
imediat, fără a se mai executa eventualele instrucţiuni scrise pentru tratarea unor evenimente
specifice sfârşitului de program (Dispose, Finalize etc.).
Fişierele deschise prin Open sunt închise şi toate variabilele sunt eliberate. Obiectele create
din modulele clasa sunt şterse, iar referinţele din alte aplicaţii la asemenea obiecte sunt
invalidate. Memoria este astfel eliberată.
Instrucţiunea Exit
Instrucţiunea Exit, în una din multiplele sale formate, întrerupe forţat o ramură de execuţie
(cum ar fi o procedură, o funcţie, o structură iterativă etc.) pentru a se continua nivelul apelant.
Sintaxa instrucţiunii este:
Exit Do
Exit For
Exit Function
Exit Property
Exit Sub
Aşa cum se poate observa, efectele comenzii se referă la o structură repetitivă de tip Do, la o
structură alternativă de tip For, la o procedură de tip funcţie, subrutină sau tip de proprietate.
Instrucţiunea Exit nu trebuie confundată cu instrucţiunea End.
Instrucţiunea Stop
Efectul acestei instrucţiuni depinde de modul de execuţie a programului. Dacă se execută un
fişier.exe (varianta compilată a programului) atunci instrucţiunea este similară instrucţiunii End
şi deci va suspenda execuţia şi va închide fişierele deschise. Dacă însă execuţia este din mediul
VBA, atunci se suspendă doar execuţia programului, dar nu se închid fişierele deschise şi nu se
şterge valoarea variabilelor. Execuţia poate fi reluată în acest caz din punctul de suspendare.
Instrucţiunea este similară introducerii unui punct de oprire (Breakpoint) în codul sursă.
Limbajul de programare Visual Basic implementează ultimele două structuri de control ale
programului, prin comenzi corespunzătoare deci :
Comenzi pentru structuri alternative (de decizie);
Comenzi pentru structuri repetitive (tip buclă).
Instrucţiunea cea mai importantă şi cea mai frecventă a limbajului este instrucţiunea de
atribuire, având forma:
variabilă = expresie
sau
Set variabilă = obiect
sau
Nume_de_funcţie = expresie
Instrucţiunea de atribuire specifică faptul că unei variabile sau unei fucţii îi este atribuită o
nouă valoare, care este specificată printr-o expresie sau printr-un obiect. O expresie constă dintr-
o secvenţă formată din operanzi (variabile, constante, etc.) şi operatori (simboluri operaţionale).
Instrucţiunea de apel procedură specifică activarea (apelul) procedurii al cărui nume apare
în instrucţiune şi are forma:
nume_de_procedură( listă_parametri_actuali)
sau
Call nume_de_procedură(listă_parametri_actuali)
Exemplu:
If a>0 Then
B=a+6
End If
unde:
- condiţie1 are una din formele:
- expresie numerică sau şir care se poate evalua True sau False (Null este interpretat
False);
- expresie de forma TypeOf objectname Is objecttype, evaluata True dacă objectname este
de tipul obiect specificat în objecttype.
- Instrucţiuni1 reprezintă blocurile de instrucţiuni executate atunci când condiţia este True.
- Instrucţiuni2 reprezintă blocurile de instrucţiuni executate atunci când condiţia este
False.
Exemplu:
If a>0 Then
B=a+6
Else: B=a-6
C=a+1
End If
Observaţie:
Sunt acceptate structuri IF imbricate, adică structuri IF cuprinse în alte structuri IF, cu
condiţia ca acestea să fie corect utilizate.
Instrucţiunea Select Case se poate utiliza în locul unor instructiuni If Then ElseIf multiple
atunci când se compară aceeaşi expresie cu mai multe valori, diferite între ele. Instrucţiunea
Select Case furnizează, prin urmare un sistem de luare a deciziilor similar instrucţiunii
If…Then…ElseIf. Totuşi, Select Case produce un cod mai eficient şi mai inteligibil.
Pe lângă structurile prezentate, se pot utiliza trei funcţii care realizează alegeri în mod
liniarizat (pe o linie de cod): Choose(), Iif(), Switch().
Atunci când dorim execuţia repetată a unei sevenţe de instrucţiuni în cadrul unui program,
este posibil ca acest lucru să fie cerut fără a cunoaşte numărul de repetări, sau, dimpotrivă,
cunoscând acest număr.
Visual Basic suportă astfel două tipuri de structuri repetitive:
structuri repetitive cu contor descrise de instrucţiunile For …Next şi
For…Each…Next care execută acelaşi lucru de un număr stabilit de ori ;
structuri repetitive cu condiţie descrise de diferitele variante ale instrucţiunii
Do…Loop ce îndeplinesc aceeaşi sarcină atâta timp cât o condiţie există sau până
când nu mai există o condiţie.
În cazul unui număr nedefinit de repetiţii, condiţia de oprire poate fi testată la începutul sau
la sfârşitul ciclului, prin alegerea structurii adecvate.
Limbajul Visual Basic ne pune la dispoziţie o varietate de comenzi şi forme ale acestora, prin
care să putem solicita oricare dintre aceste cicluri:
- cu număr nedefinit de reluări şi, în acest caz cu testarea condiţiei de reluare fie la
începutul ciclului, fie la sfârşitul acestuia;
- cu număr cunoscut de reluări, deci cu numărător.
Comenzile repetitive sau de tip buclă permit executarea în mod repetat a unei instrucţiuni sau
a unei secvenţe de instrucţiuni atâta timp cât o condiţie este adevărată sau până când o condiţie
este adevărată. Acestea sunt:
- While.....Wend;
- Do .....Loop;
- For.....Next;
- For Each....Next.
Diferitele variante posibile pentru Do…Loop diferă după momentul evaluării condiţiei şi
decizia luată.
Comanda While...End While are sintaxa:
While condiţie
Instrucţiuni
End While
Această comandă execută repetat una sau mai multe instrucţiuni atâta timp cât o condiţia
specificată este adevărată.
Comanda Do...Loop execută o secvenţă de instrucţiuni de un număr necunoscut de ori, atâta
timp cât condiţia este adevărată.
Sintaxa comenzii este:
Do While condiţie
instrucţiuni
Loop
Do...Loop testează întâi condiţia: dacă aceasta are valoarea true (este adevărată) se execută
secvenţa de instrucţiuni specificată până la Loop, altfel nu se execută nimic şi se trece la prima
instrucţiune de după Loop.
Avem de a face deci cu o structură repetitivă condiţionată anterior.
Comanda Do...Loop mai are şi o altă variantă, care execută secvenţa de instrucţiuni cât timp
condiţia este falsă (până când aceasta devine adevărată):
Do Until condiţie
instrucţiuni
Loop
O altă variantă a acestei comenzi este cea în care mai întâi se execută secvenţa de instrucţiuni
şi apoi testează condiţia, deci este o structură repetitivă condiţionată posterior.
Sintaxa instrucţiunii în acest caz va fi:
Do
instrucţiuni
Loop While condiţie
Instrucţiunile se repetă atâta timp cât condiţia este adevărată.
Dacă se doreşte repetarea instrucţiunilor cât timp condiţia este falsă se va folosi sintaxa:
Do
instrucţiuni
Loop Until condiţie
Observaţie:
O condiţie care este Null se consideră False.
Se poate abandona ciclarea oriunde în corpul structurii prin utilizarea comenzii Exit Do.
Dacă apare o comandă Exit Do se poate omite chiar şi condiţia din enunţ întrucât execuţia se va
termina prin această decizie.
Structurile Do pot fi inserate (dar complet incluse) unele în altele. O terminare (prin orice
metodă) a unei bucle transferă controlul la nivelul Do imediat superior.
Specificarea numelui contorului în linia Next poate clarifica textul sursă, mai ales în cazul
când exista structuri For…Next îmbricate.
Observaţie:
Corpul unei bucle For…Next poate include (complet) o altă structură For…Next. În
asemenea situaţii, structurile imbricate trebuie să aibă variabile contor diferite.
Instrucţiunile Exit For pot fi plasate oriunde în corpul unei bucle şi provoacă abandonarea
ciclării. Controlul execuţiei se transferă la prima instrucţiune de după linia Next.
Comanda For Each...Next repetă o secvenţă de instrucţiuni pentru fiecare element dintr-o
colecţie de obiecte sau din cadrul unui tablou (matrici). Sintaxa generală este:
For Each element In grup
instrucţiuni
Next element
unde:
- element - este variabila utilizată pentru parcurgerea elementelor. Dacă se parcurge o
colecţie de obiecte, atunci element poate fi Variant, o variabilă generică de tip Object sau o
variabilă obiect specifică pentru biblioteca de obiecte referită (un obiect enumerat în utilitarul
Object Browser). Pentru parcurgerea unui tablou, element poate fi doar o variabilă de tip Variant.
- group - este numele colectiei de obiecte sau al tabloului
- instrucţiuni - este grupul de istrucţiuni executate pentru fiecare element Instrucţiunea este
utilă atunci când nu se cunoaşte numărul de elemente sau dacă se modifică, în timpul execuţiei,
conţinutul colecţiei.
Observaţii:
Într-un bloc With nu se poate schimba obiectul procesat.
La plasarea unui bloc With în interiorul altui bloc With, obiectul extern este mascat complet,
deci calificările eventuale la acest obiect vor fi efectuate.
Nu se recomandă saltul în şi dintr-un bloc With.
Deschiderea fişierului – este o operaţie care trebuie executată înainte de orice prelucrare a
acestuia. Pentru operaţii de intrare sau ieşire, orice fişier trebuie deschis cu comanda FileOpen.
Sintaxa comenzii se prezintă astfel:
unde:
- nume fişier – este o expresie de tip şir de caractere (String) care specifică numele fişierului.
Acesta poate include întreaga cale: unitate de disc, director etc;
- mod de deschidere – specifică modul de deschidere a fişierului prin unul din următoarele
cuvinte cheie: Append (adăugare), Binary (binar), Input (citire), Output (scriere) sau Random
(aleator); Dacă lipseşte, instrucţiunea Open deschide fişierul în modul de acces Random.
- acces – specifică operaţiile permise asupra fişierului prin unul dintre următoarele cuvinte
cheie: Read (citire), Write (scriere) sau ReadWrite (citire-scriere);
- blocare – specifică operaţiile permise la deschiderea fişierului de către un alt proces prin unul
dintre următoarele cuvinte cheie: Shared (partajat), Lock Read (citire interzisă), Lock Write
(scriere interzisă), lock Read Write.
- numărFişier – un număr valid de fişier, cuprins între 1şi 511 inclusiv. Utilizând funcţia
FreeFile se poate obţine următorul număr disponibil.
- LungÎnreg- un număr mai mic sau egal cu 32767 (octeţi). Pentru fişierele deschise în acces
aleator această valoare este mărimea înregistrării. Pentru fişierele text reprezintă numărul de
caractere transferate în buffer.
Observaţie:
Instrucţiunea FileOpen alocă o memorie tampon pentru operaţiile de intrare/ieşire (I/O)
asupra fişierului şi determină modul de accces pentru memoria tampon.
Dacă fişierul specificat cu nume fişier nu există, atunci acesta va fi creat, dacă la mod de
deschidere s-a specificat Append, Binary, Output sau Random
Observaţie:
Un fişier deschis în mod Append sau Output trebuie neapărat închis înainte de a fi deschis cu
un alt număr. Fişierele deschise în mod Binary, Input sau Random pot fi deschise cu un alt
număr, fără a fi necesară închiderea lor prealabilă.
unde în rândul:
1. s-au trecut informaţiile din înregistrare ce corespund câmpurilor;
2. s-au trecut numele câmpurilor cum vor fi ele folosite în program;
3. s-au trecut tipurile de date pentru fiecare câmp.
Scrierea unei înregistrări într-un fişier aleator se face cu instrucţiunea FilePut care are
următoarea sintaxă:
Observaţie:
La fişierele aleatoare accesul la înregistrări se poate face doar prin intermediul numărului de
înregistrare.
Dacă lista fişierelor ce trebuie închise lipseşte, atunci toate fişierele deschise cu FileOpen
care sunt active în mod curent vor fi închise.
Când se închid fişierele care au fost deschise în mod Append sau Output, toate datele aflate
în zona tampon asociată fişierului vor fi scrise în fişier înaintea închiderii fişierului. Prin
închiderea unui fişier cu FileClose asocierea dintre fişier şi numărul său dispare.
Fişierele secvenţiale sunt în general şiruri de caractere, dar pot fi şi combinaţii de şiruri de
caractere şi de numere. În general se pot folosi următoarele două instrucţiuni pentru a scrie date
într-un fişier cu acces secvenţial:
a). Scrierea datelor într-un fişier secvenţial se poate face cu comenzile:
Print(NumărFişier, listă_expresii)
sau
Write( NumărFişier, listă_expresii)
unde:
listă_expresii este o listă de variabile a căror valoare urmează să fie trecută în fişier.
Pentru a scrie o înregistrare goală, după număr fişier se precizează numai virgule.
Instrucţiunea WRITE este similară cu instrucţiunea PRINT , singura diferenţă între cele
două instrucţiuni fiind că WRITE inserează virgule între termeni, şirurile de caractere sunt
delimitate de ghilimele, iar numerele pozitive nu sunt precedate de spaţii.
Exemplu:
Fiind date două liste (una de nume şi corespunzător una de vârste) să se creeze un fişier
secvenţial în care să se memoreze aceste date (numele şi vârsta fiecărui student).
Rezolvare:
Am proiectat forma şi am executat aplicaţia.
Codul sursă asociat evenimentului click al butonului de comandă Scrie în fişier este:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles Button1.Click
Dim nrF As Integer = FreeFile()
FileOpen(nrF, "d:\work\vb\fis1.txt", OpenMode.Output)
PrintLine(nrF, "PRIMUL TEST DE SCRIS INTR-UN FISIER")
PrintLine(nrF, "LA DATA DE", TAB(20), CDate(Today()))
PrintLine(nrF, New String(CChar("_"), 35))
PrintLine(nrF, "NUME PRENUME", TAB(20), "VARSTA")
PrintLine(nrF, New String(CChar("_"), 35))
For I = 0 To Me.nume.Items.Count - 1
PrintLine(nrF, Me.nume.Items.Item(I), TAB(20), _
Me.varsta.Items.Item(I))
Next I
FileClose(nrF)
End Sub
Codul asociat evenimentului click al butonului Exit:
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
Verificând pe disc, fişierul fis1.txt există:
Input(NumărFişier, ȘirCaractere)
LineInput(NmărFişier)
unde:
ŞirCaractere este o variabilă de tip String în care este preluată înregistrarea, ca şir de caractere;
LineInput returnează un șir de caractere
Citirea datelor dintr-un fişier binar se realizează într-un mod asemănător cu cel aleatoriu.
Dacă se doreşte crearea din nou a fişierului cu elementele din listă, atunci se selectează
opţiunea CREARE FIŞIER urmată de acţionarea butonului SCRIE LISTĂ ÎN FIŞIER. La
acţionarea butonului LISTEAZĂ se vor vedea doar aceste înregistrări.
Se poate şterge apoi lista (din stânga) acţionând butonul STERGE LISTA.
Urmează apoi preluarea în fişier a înregistrărilor din listă, deci cu corecţiile efectuate,
acţionând butonul SCRIE MODIFICĂRILE ÎN FIŞIER. Se afişează din nou forma 1, cu lista
fără elemente. Dacă cerem din nou o listare a fişierului (opţiunea LISTEAZĂ) se va observa că
toate corecţiile noastre au fost preluate în fişier.
Pentru a şterge o înregistrare se procedează în mod similar: se apasă butonul STERGERE
ÎNREGISTRĂRI , se afişează o nouă formă (FORM3) cu conţinutul fişierului afişat în listă; se
alege din listă înregistrarea dorită şi ca efect ea va fi dusă în caseta de text pentru confirmare cu
butonul ACCEPTA STERGERE. apoi se apasă butonul RESCRIE FISIER.
Ca efect apare din nou forma principală, în care putem lista din nou conţinutul fişierului,
pentru a ne convinge că ştergerea a fost efectuată..
Cu EXIT se iese din aplicaţie.
Codul sursă asociat controalelor din cadrul aplicaţiei se prezintă astfel:
FORM1
'Declaraţii
Dim A1 As String
Dim I1 As Integer
Form2
‘Formă pentru modificarea înregistrărilor din fişier, preluate într-o listă care apoi se trece iar în
fişier, modificată
'Declaraţii la nivel de formă
Dim I1 As Integer
End Sub
End Sub
FORM3
‘Formă pentru ştergerea înregistrărilor din fişier, preluate într-o listă care ‘apoi se trece iar în
fişier, modificată (fără înregistrările şterse)
‘Declaraţii la nivel de formă
Dim I1 As Integer
Problemă:
Completaţi şi dezvoltaţi aplicaţia de mai sus pentru a permite şi crearea şi actualizarea unui
fişier aleator.
Rezolvare:
Am adăugat pe forma principală opţiunea FIŞIER RANDOM.
Executând aplicaţia am creat fişierul, apoi am adăugat noi înregistrări, le-am vizualizat, le-
am corectat întocmai ca în aplicaţia anterioară.
Codul sursă asociat obiectelor din FORM1 ce este forma prezentată mai sus se prezintă astfel:
.
'Declaraţii la nivel de formă
Dim A1 As String
Dim I1 As Integer
Structure persoana
Dim rNr As String
Dim rNume As String
Dim rVarsta As String
End Structure
End If
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles
Button4.Click
'Evenimentul click al butonului “Exit”
End
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles Button6.Click
'Evenimentul click al butonului “MODIFICARE INREGISTRARI” ce ‘deschide “FORM2” formă în
care se vor efectua modificările după ce ‘încarcă în lista “LISTMODIF” din această formă înregistrările
din fişier
Me.Hide()
Form2.ListModif.Items.Clear()
Form2.ListBox1.Items.Clear()
Form2.ListBox2.Items.Clear()
FORM2 este o formă în care se efectuează operaţiile necesare pentru modificarea înregistrărilor din
fişierul ales (FIS1.DAT ca fişier secvenţial şi FIS2.DAT ca fişier RANDOM).
Codul sursă asociat acestei forme şi controalelor ce le conţine este: