Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica


Informatica


Qdidactic » stiinta & tehnica » informatica
Instructiuni si functii pentru lucrul cu fisiere in Visual Basic: Get, put, input, zrite



Instructiuni si functii pentru lucrul cu fisiere in Visual Basic: Get, put, input, zrite


Fisiere Visual Basic




Get

Citeste date dintr-un fisier deschis si le transfera intr-o variabila. In general, datele citite cu Get au fost scrise in fisier cu instructiunea Put. Sintaxa generala:

Get [#]filenumber, [recnumber], varname


unde

filenumber este numarul fisierului de unde se citesc date (fisierul trebuie sa fie deschis)

recnumber numar optional de tip Variant (Long), ce reprezinta numarul inregistrarii (modul Random) sau numarul octetului (modul Binary) de unde incepe citirea. Prima pozitie este 1.

varname numele variabilei care memoreaza informatia.


Daca nu se specifica numarul inregistrarii, se va citi din pozitia activa de dupa ultima instructiune Get, Put sau Seek, iar argumentul lipsa este indicat prin virgule consecutive. Astfel, de exemplu:

Get #4, , Buffer

Mai trebuie precizat faptul ca aplicarea instructiunii Get trebuie sa respecte o serie de reguli, in functie de modul de acces la fisier.


Put

Scrie valoarea unei variabile date intr-un fisier deschis in prealabil. Datele scrise cu Put sunt, in general, citite din fisier cu Get. Sintaxa generala:



Put [#]filenumber, [recnumber], varname


unde

filenumber este numarul fisierului unde se scriu datele (fisierul trebuie sa fie deschis);

recnumber numar optional Variant (Long), ce reprezinta numarul inregistrarii (modul Random) sau numarul octetului (modul Binary) unde incepe scrierea. Prima pozitie este 1.

varname numele variabilei a carei valoare se scrie in fisier.


Daca nu se specifica numarul inregistrarii se va scrie in pozitia activa de dupa ultima instructiune Get, Put sau Seek. Argumentul lipsa este indicat prin virgule consecutive. De exemplu:

Put #4, , Buffer

Ca si in cazul anterior, utilizarea acestei instructiuni trebuie sa respecte o serie de reguli, in functie de modul de acces la fisier.


Input #

Citeste date dintr-un fisier secvential si le transfera in variabilele specificate.

Instructiunea se va utiliza doar cu fisierele deschise in modul Input sau Binary, datele citite cu Input #  au fost scrise, de regula, cu Write #.

Input #filenumber, varlist

unde

filenumber numarul fisierului (deschis in prealabil);

varlist lista de variabile, separate de virgule, pentru care se citesc valorile din fisier. Nu se pot include nume de tablouri sau variabile Object, dar se accepta elemente de tablou si variabile de tipuri utilizator.

Pentru situatiile uzuale (tipuri numerice sau String standarde) atribuirea valorilor se efectueaza fara modificari. Pentru alte situatii:

Informatia citita

Valoarea atribuita

Virgula sau linie goala

Empty

#NULL#

Null

#TRUE# sau #FALSE#

True sau False

#yyyy-mm-dd hh:mm:ss#

Data si/sau timpul reprezentat de expresie

#ERROR errornumber#

errornumber (variabila este un Variant considerat drept eroare)

Mai trebuie precizat faptul ca ghilimelele duble (' ') sunt ignorate in sirul de intrare.

Evident, pentru o citire corecta, datele din fisier trebuie sa apara in aceeasi ordine si trebuie sa fie de acelasi tip cu variabilele din lista. O variabila numerica primeste valoarea 0 daca intrarea corespunzatoare nu este numerica. Atingerea sfarsitului de fisier cand operatiunea de citire nu este incheiata, determina eroare.

In general, se recomanda scrierea cu Write # in cazul utilizarii ulterioare a instructiunii Input #. 


Functia Input()

Citeste si returneaza un sir de caractere citite dintr-un fisier deschis in mod Input sau Binary. Datele citite prin aceasta functie au fost scrise, de regula, prin Print # sau Put.

Input(number, [#]filenumber)


unde

number orice expresie numerica specificand numarul de caractere care se citesc;

filenumber numar de fisier (deschis).

Spre deosebire de instructiunea Input #, functia Input returneaza toate caracterele citite (inclusiv virgule, CR, LF, ghilimele si spatii de inceput).

Pentru fisierele deschise pentru acces Binary, incercarea de a citi prin functia Input pana cand functia EOF returneaza True, genereaza eroare (metoda este aplicabila pentru citirea din fisiere binare cu Get). Pentru detectarea sfarsitului de fisier, se vor utiliza functiile LOF and Loc.

Observatie

Pentru citirea datelor octet din fisiere text se va utiliza functia InputB, cu o sintaxa similara, unde, in acest caz, number specifica numarul de octeti de returnat (in loc de numarul de caractere).


Line Input #

Citeste o singura linie dintr-un fisier secvential (care este deschis) si atribuie sirul obtinut unei variabile de tip String. O linie este considerata terminata la intalnirea caracterului CR (Chr(13)) sau a combinatiei CR + LF (Chr(13) & Chr(10)). Caracterele CR si/sau LF nu sunt adaugate sirului atribuit. Sintaxa generala este:

Line Input #filenumber, varname

unde

filenumber numarul atasat fisierului (deschis),

varname nume de variabila de tip String sau Variant.

Datele citite cu Line Input # sunt, de regula, scrise cu Print #.


Write #

Scrie o inregistrare intr-un fisier secvential. Datele scrise prin Write # sunt citite, de regula, cu Input #. Utilizarea instructiunii Write # asigura o delimitare corecta a fiecarui camp scris, ceea ce permite regasirea corecta (fara alte artificii) a informatiilor la citirea cu Input #. In acelasi timp, informatiile sunt regasite corect, indiferent de configurarile locale.

Sintaxa este

Write #filenumber, [outputlist]

unde

filenumber numarul atasat fisierului (deschis in prealabil),


outputlist o lista de expresii numerice sau sir, separate prin virgule, spatii sau punct-virgula, ale caror valori se scriu in fisier.

Specificarea unei virgule dupa filenumber fara outputlist produce o linie goala in fisier.

Sunt respectate urmatoarele reguli de scriere:

  • datele numerice sunt scrise utilizand punctul ca separator zecimal (indiferent de setarile locale);
  • datele de tip Boolean sunt scrise ca #TRUE# sau #FALSE#, nefiind traduse dupa setarile locale;
  • datele calendaristice si timpul sunt scrise potrivit formatului de data universala; daca o componenta este omisa (sau este zero), se scrie doar partea indicata;
  • Null se scrie drept #NULL#, iar Empty nu produce nimic la iesire;
  • datele de tip Error apar ca #ERROR errorcode#.

Instructiunea Write # insereaza virgule intre elementele scrise in fisier, si ghilimele in jurul sirurilor de caractere (prin urmare, nu este nevoie ca utilizatorul sa introduca separatori pentru claritate). Dupa ce toate valorile au fost scrise, se insereaza automat o combinatie CR+LF, astfel incat urmatoarea scriere va fi la un rand nou.


Print #

Scrie intr-un fisier secvential date formatate ca pe ecran (display-formatted). Prin urmare, cu exceptiile specificate in continuare, setarile locale sunt respectate. Datele scrise cu Print # sunt, de regula, citite cu Line Input # sau cu Input.

Sintaxa este

Print #filenumber, [outputlist]


unde

filenumber numarul atasat fisierului (deschis in prealabil),

outputlist lista de expresii formatate ale caror valori sunt tiparite. Elementele se separa prin virgule, spatii sau punct si virgula.

Un element al listei de iesire este de forma

[] [expression] [charpos]


unde

Spc(n) insereaza n spatii la iesire

Tab(n) pozitioneaza punctul de insertie (inceputul zonei de scriere) la o coloana indicata prin valoare absoluta de n. Utilizand doar Tab, se trece la urmatoarea zona de iesire.

expression expresia a carei valoare se tipareste (numerica sau String).

charpos Specifica pozitia punctului de insertie pentru urmatorul caracter care va fi tiparit, potrivit tabelului care urmeaza.

charpos

Locul punctului de insertie

Imediat dupa ultimul caracter tiparit

Tab(n)

Coloana cu numarul n

Tab

Inceputul urmatoarei zone de tiparire

Daca nu se specifica nici un specificator, urmatoarea tiparire va fi pe randul urmator.

Daca se omite outputlist, dar se include un separator dupa filenumber, se va insera o linie goala in fisier.

Datele logice sunt scrise drept True, False (fara traduceri locale).

Datele calendaristice sunt scrise potrivit setarii locale pentru format scurt.

Mai trebuie precizat ca Empty nu produce nimic, Null este scris Null, iar Error este scris ca Error errcode (fara traduceri locale).

Informatiile numerice scrise respecta configurarile locale (separator zecimal).

Pentru o interpretare corecta, utilizatorul trebuie sa separe valorile afisate prin formatari adecvate.


Exemplu

1. Sa se realizeze scrierea datelor intr-un fisier.

Astfel, pentru a salva datele din tabloul strTablou intr-un fisier, se va putea utiliza urmatoarea procedura, ScrieFis, al carei argument, strNumeFis contine calea si numele fisierului de iesire. Numarul de elemente din vector este dat de variabila lNrElem


Public Sub ScrieFis(strNumeFis As String)

Dim lIndiceTablou As Long

Open strNumeFis For Output As #1

For lIndiceTablou = 1 To lNrElem    ' s-a considerat indicele primului element - 1

Print #1, strTablou(lIndiceTablou)

Next lIndiceTablou

Close #1

End Sub



Seek

Stabileste pozitia (inregistrarii sau octetului) intr-un fisier unde se va efectua urmatoarea operatie de intrare/iesire, fisierul fiind deschis prin Open (vezi si functia Seek). Sintaxa este:

Seek [#]filenumber, position

unde

filenumber numarul atasat fisierului;

position numar intre 1 si 2,147,483,647, inclusiv, care indica locul urmatoarei
operatii I/O.


Numerele inregistrarilor specificate in instructiunile Get si Put au prioritate in raport cu pozitia fixata prin Seek (are loc o repozitionare).

Daca instructiunea Seek indica o pozitie aflata dupa sfarsitul fisierului, urmatoarea operatie de scriere (fara repozitionare) extinde fisierul. Pozitia indicata nu poate fi zero sau negativa.


Functia Seek

Returneaza un intreg Long, ce reprezinta pozitia curenta I/O dintr-un fisier specificat. Fisierul trebuie sa fie in prealabil deschis.

Seek(filenumber)

filenumber este un numar de fisier.


Valoarea returnata este intre 1 si 2,147,483,647 (echivalent cu 2^31 - 1), inclusiv. Semnificatia depinde de modul de acces:

Modul de acces

Valoarea returnata

Random

Numarul urmatoarei inregistrari (care va fi citita sau scrisa)

Binary, Output, Append, Input

Pozitia octetului (numerotat de la 1) la care va avea loc urmatoarea operatie I/O



EOF

Returneaza un intreg cu valoarea logica True (-1) atunci cand se atinge sfarsitul unui fisier deschis pentru citire (Random, Binary sau Input). Pentru fisierele deschise in iesire functia returneaza totdeauna True. Sintaxa generala:

EOF(filenumber)

filenumber este un intreg continand numarul fisierului testat.


Utilizarea uzuala este

Do While Not EOF(filenum)

. (instructiuni, inclusiv citire din fisierul filenum)

Loop

Pentru acces secvential (Input) se returneaza False pana cand se atinge sfarsitul de fisier, in timp ce pentru fisierele deschise in mod Random sau Binary, se returneaza False pana cand ultima instructiune Get executata nu a putut citi inregistrare completa.

Citirea cu Input dintr-un fisier deschis in mod Binary produce eroare la utilizarea procedeului general (pana cand EOF() este True): se va utiliza citirea cu Get sau citirea cu Input, impreuna cu functiile LOF sau Loc.


Exemplu

  1. Se considera citirea unui fisier si memorarea liniilor fisierului intr-un vector, cu elemente siruri de caractere.

De exemplu, se poate considera ca datele au fost scrise in fisier prin intermediul procedurii anterioare, ScrieFis

Se considera vectorul strTablou, Public. De asemenea, se va defini o alta variabila, lNrElem, care va memora numarul de elemente din vector.


Public lNrElem As Long

Public strTablou(1000) As String


Urmatoarea procedura poate fi utilizata pentru citirea liniilor dintr-un fisier secvential si memorarea lor intr-un vector.


Public Sub CitesteFis(strNumeFis As String)

Open strNumeFis For Input As #1

Do

lNrElem = lNrElem + 1

If (lNrElem <= 1000) And (Not EOF(1)) Then

Line Input #1, strTablou(lNrElem)

End If

Loop Until (EOF(1) Or lNrElem = 1000)

Close #1

End Sub


Argumentul strNumeFis care este transmis procedurii CitesteFis, trebuie sa indice calea si numele fisierului ce contine datele ce trebuie citite. De notat ca vor fi citite maxim 1000 linii de date, deoarece aceste este numarul de elemente pe care le poate avea vectorul strTablou (asa cum a fost definit). Eventual, se poate lucra cu tablouri dinamice, caz in care conditia de oprire din bucla de citire va contine doar verificarea sfarsitului de fisier (EOF).


Loc

Returneaza un Long, ce reprezinta pozitia curenta de citire/scriere intr-un fisier deschis. Sintaxa generala este:

Loc(filenumber)

filenumber este numarul atasat fisierului.


Valoarea returnata de functie depinde de modul de acces:

Mod

Valoarea returnata

Random

Numarul ultimei inregistrari scrise sau citite

Sequential

Pozitia curenta impartita la 128 (se spune ca aceasta informatie nu este niciodata utila sau utilizata)

Binary

Pozitia ultimului octet citit sau scris.

Functia Loc este utilizata, impreuna cu functia LOF, la testarea sfarsitului de fisier la citiri in modul de acces Binary.


LOF

Returneaza un Long care reprezinta, in octeti, marimea unui fisier deschis prin Open. Pentru fisierele nedeschise se poate utiliza, in acelasi scop, functia FileLen(). Sintaxa generala este:

LOF(filenumber)

filenumber este numarul atasat fisierului.


Utilizarea acestei functii, impreuna cu functia Loc, pentru determinarea sfarsitului de fisier accesat in mod Binary se poate realiza conform urmatoarei secvente:

Open filename For Binary As filenum

Do While CurrentLocation < LOF(filenumber)

. (citire din fisierul filenum )

CurrentLocation = Loc(filenumber)


Loop


Exemplu

Sa se implementeze o functie care returneaza continutul unui fisier text, al carui nume este specificat ca argument al functiei.

O posibila implementare este urmatoarea:

Function CitesteFisText(NumeFis$) As String

Dim nrFis As Integer

nrFis = FreeFile

Open NumeFis$ For Input As #nrFis

CitesteFisText = Input$(LOF(nrFis), nrFis)

Close #nrFis

End Function

Functia poate fi apelata, de exemplu, pentru a afisa intr-o eticheta continutul fisierului Autoexec.bat:

Label1.Caption = CitesteFisText('C:AUTOEXEC.BAT')




Deoarece gestionarea fisierelor nu se rezuma doar la scriere/citire, in tabelul urmator este un rezumat al principalelor operatii pe care le suporta fisierele, cu instructiunile care faciliteaza respectiva actiune.

Actiune

Instructiuni

Citire

Get, Input, Input #, Line Input #

Controlul iesirilor

Format, Print, Print #, Spc, Tab, Width #

Copierea unui fisier

FileCopy

Creare, acces

Open

Fixarea atributelor

FileAttr, GetAttr, SetAttr

Fixarea pozitiei active de citire/scriere

Seek

Inchidere

Close, Reset

Informatii despre un fisier

EOF, FileAttr, FileDateTime, FileLen, FreeFile, GetAttr, Loc, LOF, Seek

Lungimea unui fisier

FileLen

Operatii asupra fisierelor

Dir, Kill, Lock, Unlock, Name

Scriere

Print #, Put, Write #




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright