Home | BAC/Teze | Biblioteca | Jobs | Referate | Horoscop | Muzica | Dex | Games | Barbie

 

Search!

     

 

Index | Forum | E-mail

   

 NOTA pentru REFERATE si ESEURI: Articolele prezentate in aceasta sectiune de referate au scop strict didactic. Ele sunt elaborate de profesori, elevi sau studenti care s-au documentat atent pentru elaborarea lor. Prezenta sectiunii de REFERATE in cadrul site-ului are un rol enciclopedic. Pagina de referate interzice strict predarea acestor materiale pentru orele de curs in gimnaziu, liceu sau facultate!

 

 
 
 
 
 + Click:  Grupuri | Newsletter | Portal | Ziare,Radio/TV | Forum discutii | Premii de excelenta | Europa

 

 

 

 

  < Inapoi la Cuprins Referate

Referat trimis de: Radu Serban | ADAUGA UN REFERAT! - APASA AICI!

 

Fisiere Pascal



Fișiere text


Se numește fișier text o succesiune de caractere ASCII terminată cu caracterul ^Z . Putem considera fișierul ca fiind alcătuit din linii separate prin două caractere (cr și lf ) șI care nu au în mod obligatoriu lungimea egală , deși în practică de multe ori fișiere text cu o singură linie.

Fișierele text au o importanță deosebită din două motive:
• Sunt direct afișabile
• Orice editor de texte lucrează cu fișiere de acest tip.

Structura generală a unui fișier text se observă în figura de mai jos.



Întrucât , în general , liniile nu au același număr de caractere , accesul la o anumită linie in fișier se face secvențional (se citesc pe rând liniile , până se ajunge la linia căutată ).
În program , un fișier text se declară ca variabilă de tip predefinit și anume text:
VAR a, b :text;
Pentru a face legătura între numele fișierului din program și numele său de suport extern pe care se află sau se creează , se folosește procedura assign.
Apelul procedurii se realizează prin :
ASSIGN (nume fișier în program , ‘nume fișier pe suport extern ‘).
 

Exemplul 1            var a:text;

                                     ..........

                                    assign(a,'f1.dat')


În acest caz , fișierul va fi creat sau se va găsi în directorul în care ne aflăm și se numește f1.dat.
O formă echivalentă pentru assignare de acest tip este:
 

                                     Exemplul2     

      var a:text;

b:string;

...........

b:='f1.dat'

assign(a,b)



Exemplul3

Fișierul se găsește sau se va găsi pe a și va avea numele t.txt.

var a:text;

............

assign (a,'a:\t.txt')



Exemplul4

Fișierul se găsește sau se va găsi pe C în subdirectorul v al directorului h și se numește util

 

      var a:text;

............

assign (a,c:\h\v\util).



CREAREA ȘI EXPLOATAREA FIȘIERELOR TEXT


Odată declarat și efectuată legătura între numele său din program și numele său depe suport extern, un fișier se poate crea. Procedura care deschide deschide un fișier pentru a fi creat este rewrite. Formula generală este:

REWRITE (variabila fișier).


Scrierea înregistrărilor în fișier se face utilizând două proceduri – WRITE și WRITELN. pentru început, vom face scrieri și citiri în fișier utilizând numai variabile de tip string. Din acest motiv vom prezenta o formă simplificată a procedurilor enunțate. Forma de apel simplificată a procedurii WRITELN este:
WRITELN (var Fișier, variabilă de tip string);
Procedura WRITE scrie o linie în fișier, conținutul liniei este dat de conținutul variabilei de tip string și marchiază sfârșiitul de linie (CR, LF).
După ce a fost creat, fișierul se închide (se marchează sfârșiitul de line).
Inchiderea se face utilizând procedura close. Forma generală a acesteia este:
CLOSE (nume fișier).

Programul următor creează un fișier text cu mai multe linii.

program txt1;

var   f:text;

      a:string;

begin

   assign(f,'f1.dat');

   rewrite(f);

   while not eof do

   begin

      readln(a);

      writeln(f,a)

   end;

   close(f)

end.

Datele sunt introduse de la tastatură .Să presupunem că introducem următoarele date:
Asdfghj(ENTER)
12weh(ENTER)
a g(ENTER)
1 ^z(ultimul caracter introdus s-a obținut tastând (CTRL+Z).
Fișierul creat va conține 4 linii:

Linia 1 asdfghj
Linia2 12weh
Linia3 a g
Linia4 1

Liniile sunt separate cu CR+LF. Funcția booleană EOF ia valoarea TRUE dacă este întâlnit caracterul ^z (acesta va marca sfârșiitul introducerii datelor).
Considerăm programul următor ce creează un fișier text.

program txt3

var   f:text;

      a:string:

begin

   assign(f,'f2.dat');

   rewrite(f);

   while not eof do

begin

      readln(a);

      write(f,a)

      end;

      close(f)

end.

În acest program am înlocuit procedura WRITELN cu procedura WRITE . Consecința? La același șir de intrare, noul fișier text va avea o singură linie ce conține toate caracterele introduse, mai puțin CR. Putem acum prezenta forma simplificată a procedurii WRITE. Aceasta este:
WRITE (variabilă de tip string).
Are rol de a scrie în fișier conținutul variabilei string dar nu marchează sfârșitul de linie. Astefel, la un eventual apel ulterior al acestei proceduri se va scrie în continuarea liniei.
Este normal să și citim fișierul creat anterior.
Pentru aceasta, trebuie prezentate alte trei proceduri: RESET, READLN, READ.
Procedura RESET deschide un fișier pentru citire și are forma generală:
RESET (variabilă fișier)
Pentru procedurile READ și READLN se vor prezenta forme simplificate.
Forma procedurii READLN este:
READLN (var fișier, variabilă de tip string)
Citește maxim 256 de caractere din linia curentă a fișierului. Dacă linia are mai puțin de 256 de caractere este citită toată iar conținutul efectiv al variabilei de tip string va fi fișierul de caractere până la CR. Indiferent de caz, după citire se trece la linia următoare a fișierului. Funcția booleană EOF (VARIABILĂ FIȘIER) ia valoarea TRUE dacă s-a la sfârșiitul fișierului , în caz contrar ia valoarea FALSE.
Programul următor citește fișierul creat cu ajutorul lui WRITELN.

program  txt3;

var   f:text;

      a:string:

 

begin

    assign(f,'f1.dat');

    reset(f);

    while not eof do

    begin

       readln(f,a);

       writeln(a)

    end;

end.

procedura READ are forma generală :
READ (var fișier, variabila de tip string)
Pentru a înțelege exact cum funcționează READ ne imaginăm o linie de fișier cu mai mult de 256 de caractere . După deschiderea fișierului și plasarea la începutul acestei linii apelăm pentru prim dată READ .Vor fi citite 256 (dacă au mai rămas atâtea caractere necitite în linie) sau câte au mai rămas până la întâlnirea sfârșitului de linie .În programul txt4 se citește fișierul text f2.dat (cel creat pe o singură linie ).

program  txt4;

var   f:text;

      a:string;

 

begin

   assign(f,'f1.dat');

   reset(f);

   while not eof(f) do

   begin

      read(f,a);

      writeln(a)

   end;

end.

Oare variabilele de tip string sunt singurele care se pot scrie și citi din fișiere? Răspunsul la această întrebare este negativ , și cum este momentul să prezentăm instrucțiunile de citire și scriere în mod generalizat.
Atât cu READ cât și cu READLN se pot citi mai multe tipuri de variabile :
• De tip char
• De tip string
• De tip numeric
Forma lor generală este:
READ(var nume fișier, v1[,v2,…,vn]);
READLN(var nume fisier,v1[,v2,…,vn]);
Variabilele v1…vn sunt de tipurile prezentate anterior .
Procedura READLN se execută la fel ca READ după care se face saltul la linia următoare .
Pentru a înțelege exact modul de citire (scriere) a acestei variabile , să ne imaginăm întregul fișier text(ca însușire de caractere ASCII). De asemenea , ne imaginăm o săgeată (se numește pointer) care ne indică în permanență la care caracter am ajuns. Când deschidem un fișier pentru citire , pointer-ul indică primul caracter din prima linie a acestuia. Considerăm, de asemenea, mulțimea caracterelor ASCII împărțită în două submulțimi:
• cu rol de separare (spațiu, CR, LF, TAB, BACKSPACE, BELL) .
• submulțimea alcătuită din restul caracterelor.

CITIREA VARIABILELOR DE TIP CHAR


Se citește acel caracter care se găsește pe poziția curentă a pointer-ului (nu interesează dacă este vorba de caractere care au un rol separator. După citire , pointer-ul avansează în fișierul cu un caracter . Că este așa , o demonstrează programul următor:

program txt5;

var   f:text;

      a:char;

 

begin

   assign(f.'f1.dat');

   reset(f);

   while not eof(f) do

   begin

      read(f,a);

      write(a)

   end

end.

Acest program listează fișierul creat la începutul lucrării. Liniile apar listate exact în ordinea în care au fost introduse (se știe că f1.dat a fost creat pe mai multe linii).


CITIREA VARIABILELOR DE TIP STRING



Aceste variabile se citesc din poziția curentă a cursorului până este citit numărul de caractere necesar tipului sau până s-a ajuns la sfârșit de linie. Programul următor demonstrează acest fapt (dacă linia 1 a fișierului are 3 caractere , se vor tipări două pe un rând și unul pe al doilea rând). După citirea unei astfel de variabile , pointer-ul se află sau pe caracterul ce urmează după ultimul caracter citit sau pe CR. În situația în care pointer-ul se află pe CR și se forțează o nouă citire de tip string , se returnează șirul vid.

program  txt6;

var   f:text:

      a:string[2];

      b:string;

 

begin

   assign(f,'f1.dat');

   reset(f);

   read(f,a);

   writeln(a);

   read(f,b);

   writeln(b)

end.


CITIREA –VARIABILELOR DE TIP NMERIC


Se plecă de la poziția curentă a pointer-ului . Dacă se întâlnește un caracter separator , pointer-ul care la următorul caracter și procedeul se repetă până s-a ajuns la un caracter ce nu este separator sau până când s-a ajuns la sfârșit de linie. În al doilea caz , se solicită o nouă linie , iar pointer-ul sare la începutul liniei următoare . În primul caz , se tastează caracterele cuprinse între poziția curentă a pointer-ului și primul caracter separator. Dacă acestea se încadrează în diagrama de sintaxă pentru întreg (dacă se citește un tip întreg ) sau real(dacă se citește un tip întreg) , citirea se face , iar pointer0ul se așează pe primul caracter separator ; dacă sintaxa nu este îndeplinită , programul se încheie cu eroare.
Exemple
Avem următoarele variabile a:integer , e:real , d:string[2].
• Se execută read (f,a,f,e); pointer-ul este poziționat pe primul caracter din linie , iar linia este bbb12b34bbbbt (prin b am notat caracterul blanc). În urma execuției vom avea : a=12 , f=34 , d=bbbbt.
• Se execut[ read (f,d,e,f) , prima linie din fișier este bm iar a doua 2b3 (prin b am notat blanc). Variabila d va conține bm ,e va conține șirul vid , iar f va fi 2.
• Se execută read(a) iar prima linie din fișier va fi 3t (pointer-ul va fi poziționat pe primul caracter din linie). Execuția se încheie cu o eroare (a nu respectă tipul numeric).
Procedura READLN fără parametri de tip variabilă produce saltul pe linia următoare (exemplul READLN(F) ) , iar cu parametri , după ce a reușit tentativa de citire se sare pe linia următoare.
Pentru scriere , se folosesc procedurile WRITE și ERITELN .Forma generală a acestor proceduri WRITE este:
WRITE (var nume fișier , v1[v2,…,vn])
unde v1,v2,…,vn reprezintă nume de variabile sau date ce se scriu în fișier.
Procedura WRITELN are forma generală:
WRITELN(var nume fișier , v1 [v2,…,vn] ).
Parametri au aceeași semnificație ca la procedura WRITE. Spre deosebire de WRITE , după scriere procedura WRITELN încheie linia din fișier (scrie CR și LF) și trece pe linia următoare ( pointer-ul este poziționat pe primul caracter al liniei următaoare ). Se pot scrie de tipul:
• Numeric (întreg sau real );
• Char;
• String;
• Boolean;
Scrierea se poate faceîn două feluri:
• Cu format implicit ;
• Cu format explicit.

SCRIEREA CU FORMAT IMPLICIT


În toate aceste cazuri , se scrie incepând din poziția curentă a pointer-ului .
• Datele întregi se scriu cu toate cifrele semnificative , iar dacă numărul este negativ , se scrie în fața semnului -;
• Datele reale se scriu în forma științifică (exemplu : -3.35 se scrie –3.3500000000E-01 ) care se citește ce numaăr (cu semn ) * 10 la puterea (cu semn) ;
• Datele de tip caracter se scriu pe o singură poziție ;
• Datele de tip string se scriu pe o lungime efectivă a șirului;
• Pentru o dată de tip boolean se scriu TRUE sau FALSE;

SCRIEREA CU FORMAT EXPLICIT

SCRIEREA DATELOR DE TIP ÎNTREG


Pentru fiecare variabilă întreagă (prezentă în instrucțiunea de scriere ) se poate preciza numărul m de poziții pe care se face scrierea .
Exemplu : WRITE (F,A :6) .
În cazul în care numărul de poziții ocupate de un număr este mai mare decăt numărul m , parametrul este ignorat , iar dacă m este mai mare decât numărul de poziții ocupate efectiv , numărul se scrie aliniat dreapta (se va ține cont de faptul ca un număr negativ va fi precedat de semn).

SCRIEREA DATELOR DE TIP REAL


Pentru aceste date se pot preciza doi parametri m și n.
Exemplu WRITE ( f,a:5:2)
unde a este o variabilă reală , m are valoarea 5 iar n are valoarea 2 .
Parametrul m specifică numărul de poziții pe care se csrie data reală.
Parametrul n specifică numărul de poziții rezervate părții zecimale(exclusiv punctul). În cazul în care sunt prezenți ambii parametri , numărul se scrie în forma cunoscută nouă și anume cu punct (de exemplu 23.67) .Dacă valoarea parametrului m este prea mică (numărul ocupă mai multe poziții) , ea este ignorată (se scrie numărul cu toate cifrele lui), numărul va fi scris rotunjit cu un număr de zecimale egal cu valoarea lui n. În cazul în care numărul aliniat dreapta (în față se pun blancuri). Dacă parametrul m are o valoare prea mică , numărul este rotunjit , iar dacă are o valoare prea mare , el este aliniat la dreapta.

SCRIEREA DATELOR DE TIP CARACTER


Pentru aceste date se poate folosi numai parametrul m care semnifică numărul de poziții pe care se scrie acesta. Dacă m este mai mare decât 1 , datase scrie aliniată la dreapta , iar în față se pun blancuri.

SCRIEREA DATELOR DE TIP STRING


Pentru date de acest tip, se iau în considerare lungimea efectivă a șirului și valoarea parametrului m ce specifică numărul de poziții pe care se face scrierea. În cazul în care valoarea lui m este mai mică decât lungimea efectivă a șirului, acestea se ignoră, șirul va fi scris pe lungimea sa efectivă. Dacă valoarea lui m este mai mare decât lungimea efectivă a șirului, acesta este scris pe m poziții aliniat dreapta, iar în față se pun blancuri.

CRIEREA DATELOR DE TIP BOOLEAN


Avem numai două astfel de date, TRUE și FALSE. Și pentru date de acest tip se poate preciza numărul de poziții pe care să se facă scrierea. Dacă numărul de poziții este mai mic, se ignoră, iar dacă este mai mare, acestea se scriu aliniat dreapta, în față se pun blancuri (ex. WRITE (f, TRUE:9)).

ALTE PROCEDURI ȘI FUNCȚII CARE LUCREAZĂ CU FIȘIERE TEXT

PROCEDURA APPEND


Această procedură are rolul de a deschide un fișier text care a creat pentru extindere (scriere la sfârșit de fișier). Forma generală este APPEND (var fișier text.
În situația în care fișierul nu există , se generează o eroare de intrare ieșire.
Pentru un fișier deschis cu APPEND este posibilă numai operația de scriere. În exemplul care urmează , se adaugă alte linii fișieruului f1.dat.

program  txt;

var  f:text;

     a:string;

 

begin

  assign(f,'f1.dat');

  append(f);

  while  not  eof  do

  begin

    readln(a);

    writeln(f,a)

  end;

  close(f);

end.


FUNCȚIA EOLN


Are ca parametru formal o valoare fișier și este de tip boolean. La execuție , funcția întoarce valoarea TRUE dacă pointer-ul este la sfârșit de linie și FALSE în caz contrar.
In progranul care urmează se tipărește ultumul caracter al primei linii pentru un fișier text crteat anterior.

program  txt7;

var  f:text;

     a:char;

begin

assign(f,'f1.dat');

reset(f);

while not eoln(f) do read(f,a);

writeln(a);

close(f)

end.


FIȘIER TEXT STANDARD

FIȘIERELE INPUT ȘI OUTPUT


Aceste fișiere se consideră declarate (nu mai este necesară declararea lor ca fișier text). Ele se asignează în mod automat la tastatura INPUT și monitor OUTPUT. În situația în care procedurile READ, READLN, WRITE, WRITELN nu au precizată la apel variabila fișier, aceasta este considerată automat IMPUT pentru procedurile de citire și OUTPUT pentru procedurile de scrieere.
Toate operațiile de citire și scriere efectuate în programele din capitolele anterioare au fost făcute cu aceste fișiere.

FIȘIERUL PRN


Dacă dorim ca rezultatele programului să fie scrise la imprimantă, folosim fișierul standard PRN. Aceasta se declară în cadrul proce4durt5ii ASSIGN ca nume extern pentru fișier.
Vom lua, ca exemplu , o imprimantă care scrie pe hârtie de format A4 (coală normală de scris). Se consideră că pe o astfel de coală se pot scrie 55 de rânduri. În programul care urmează vom scrie în primele două rânduri texte, după care se sare la pagină nouă (se scriu 53 de rânduri vide cu ajutorul procedurii WRITELN) .

program txt;

var  imp:text;

     i:integer;

 

       begin

  assign(imp,’prn’);

  rewrite(imp);

  writeln (imp,’am scris un text');

  writeln(imp,’am scris alt text’);

  for i:=1 to 53 do writeln(imp);

close(imp);

end.

Regulile prin care se scriu diversele date la imprimantă sunt aceleași ca pentru oricare alt fișier text.

VALIDAREA OPERAȚIILOR DE INTRARE / IEȘIRE


Din categoria operațiilor de intrare / ieșire fac parte citirile , scrierile în și din diverse fișiere dar și operații cum ar fi deschiderea unui fișier pentru citire sau scriere. Nu întotdeauna aceste operații se desfășoară în mod normal. Să ne imaginăm următoarea situație : programul nostru citește o variabilă numerică și noi, din greșeală introducem o literă . Programul se va opri și va da un mesaj de eroare. Poate veți spune
Că trebuie să fim atenți la introducerea datelor . Dar sunt situații în care erorile sunt inerente . De exemplu, pentru a crea un fișier ce se folosește în practică (și nu unul didactic, care are doar câteva linii) se introduc mii de date. Este aproape imposibil ca la introducerea lor să nu se greșească –caz în care ar trebui să o luăm de la capăt. Ce este de făcut pentru preîntâmpinarea acestor situații? Limbajul Turbo Pascal ne permite să prevedem în program astfel de cazuri și să acționăm în consecință.
Presupunem că programul pe care l-am conceput nu a prevăzut posibilitatea ca operațiile de intrare / ieșire să nu se desfășoare în mod corespunzător. În acest caz programul se încheie cu eroare (se afișează codul erorii). Într-un prim pas , este necesar ca programul să nu se oprească într-o astfel de situație. Pentru aceasta există o posibilitate și anume directiva de4 compilare {$I} ce poate avea două valori {$i-} și {$i+} . Directiva {$i-} determină ca toate operațiile de intrare / ieșire cuprinse între ea și directiva {$I+} sau sfârșitul programului să nu determine întreruperea acestuia.
Ne putem întreba ce realizăm dacă procedăm astfel , pentru că oricum rezultatele vor fi eronate. Există posibilitatea să determinăm dacă operația de intrare / ieșire a reușit sau nu . Funcția IORESULT (funcție de tip byte care se găsește prezentă în unit-ul SYSTEM ) ne ajută în acest sens. În cazul unei oprații reușite , la execuție funcția ia valoarea 0, în caz contrar ia valoarea diferită de 0. Pin testul valorii pe care o furnizează această funcție avem posibilitatea să reluăm operația până când ea reușește. În cele ce urmează se va da mai multe exemple ca re au menirea să convingă de utilitatea de a lucra în acest mod.

Exemplul 1:

program  v1;

var  a:=integer;

 

begin

      repeat

        write('a=');

        {$i-} readln(a) {$i+}

   until  ioresult=0

end.

Exemplul 2:

Să presupunem că se dorește crearea unui fișier text. Deschiderea lui pentru scriere se face utilizând procedura REWRITE. În situația în care pe suport se găsește alt fișier cu același nume , acesta din urmă este șters. Este bine să fim avertizați în acest sens. Prin urmare , se încearcă deschiderea fișierului care urmează a fi creat (prin RESET). Dacă el se găsește pe suport , funcția IORESULT va lua valoarea 0 iar în caz contrar va lua valoarea 1. În cazul în care aceasta ia valoarea 0, operatorul va decide dacă fișierul se va crea(deci cel vechi se distruge) sau nu.

program v2;

var  f:text;

     a:string;

     rasp:char;

 

begin

  write('Dati  numel fisierului ce se va crea  ');

  readln(a);

  assign(f,a);

  {$i-}  reset(f)  {i+};

  if ioresult<>0 then

  begin

    write  (Fisierul  se gaseste pe suport.Continuam?  (y/n');

    readln(rasp)

  end;

  if  rasp='y'  then

  begin

    writeln   ('Fisierul  a fost  sters');

    rewrite(f)

  end

end.


Exemplul 3:

Dorim să scriem un text la imprimantă . Există mai multe motive pentru care tentativa noastră poate eșua:
• Imprimanta nu este deschisă;
• Imprimanta nu este ON LINE;
• Nu am pus hârtie.
În toate aceste cazuri , un program neprotejat se oprește . Programul care urmează scrie mesajul până când operația de scriere reușește (IORESULT ia valoarea 0).

program  v3;

var  imp:text;

 

begin

   assign(imp,'prn');

   rewrite(imp);

   repeat

     {$i-}  writeln(imp, 'un mesaj');

   until  ioresult=0

end.


ALTE TIPURI DE VALIDĂRI

VALIDAREA NATURII DATELOR


Din acest punct de vedere datele se pot clasifica astfel:
• Date numerice ( numere întregi și reale);
• Date alfabetice (nu conțin cifre, sunt formate din literele mari și mici ale alfabetului);
• Date alfanumerice (conțin atât literele alfabetului cât și cifre).
Să presupunem că se dorește citirea unor nume de persoane . Evident, acestea sunt date alfabetice. Cum putem testa dacă nu cumva , din greșeală , în cadrul unor nume nu s-au introdus și cifre? Exemple de acest tip ar putea continua.

TESTATREA NATURII NUMERICE A DATELOR


O modalitate de test numeric a fost deja prezentat (prin introducerea unei litere la citirea unei variabile numerice funcția IORESULT ia valoarea 0).
Există și o altă modalitate de a efectua acest test. Pentru aceasta se procedează astfel :
• Citirea datei se face într-o variabilă de tip string (deci se pot introduce orice fel de date)
• Se face o tentativă de conversie din tipul string în tipul numeric solicitat (procedura VAL)
• În situația în care tentativa reușește , data introdusă a fost numerică
• În caz contrar , data introdusă nu a fost numerică deci se reia citirea .
Această modalitate de lucru prezintă și mari avantaje de a ne oferi posibilitatea să tastăm numărul de cifre introduse , prin analiza lungimii șirului de tip string (funcția LENGTH)
În programul care urmează se citește o dată care trebuie să fie numerică și să fie scrisă pe trei cifre (care pot fi și 0).

program  v4;

var  a:string;

     c_er,b:integer;

 

begin

  repeat

    write('b=');

    readln(a);

    val(a,b,c_er)

  until (c_er=0)and(length(a)=3)

end.


TESTAREA NATURII ALFABETICE A DATELOR


Pentru acest test se procedează astfel:
• Literele mari și mici ale alfabetului alcătuiesc o mulțime și se declară constante
• Citirea se face într-o variabilă de tip string
• Se testează toate caracterele șirului citit
• Dacă cel puțin un caracter nu aparține mulțimii considerate , citirea se reia.
În programul care urmează se explică acest test.

program  v5;

const  alfabet=['a'..'z','A'..'Z'];

var a:string;

    i,c_er:integer;

 

begin

  repeat

    c_er:=0;

    write('dati data ');

    readln(a);

    for i:=1 to length(a) do

      if not (a[i] in alfabet thenc_er:=1

  until  c_er=0

end.

Datele alfanumerice nu necesită validitate.
Toate tipurile de validare prezentate aici sunt valabile indiferent de tipul de fișier ales.


FIȘIERE CU TIP


Fișierele cu tip sunt construite din articole cu lungime fixă , de același tip , motiv pentru care se mai numesc și fișiere cu prelucrare la nivel de articol.
Tipul fișier cu tip se declară conform figurii de mai jos:



EXEMPLE de declarare

• Se declară două fișiere ale căror articole sunt construite dintr-un singur octet:

type  fisoct=file of byte

var f1,f2:fisoct;

Aceleași două fișiere se pot declara printr-un tip anonim:

var f1,f2 : file of byte

• Se declară un fișiere ale carui articole sunt numerice îtregi :

type  fisint=file  of   integer;

................................

var  a:fisint;

• Se declară un fișier cu articole de tip record:

type   inreg=record

    nume:string[30];

    varsta:bvyte

    end;

    fisier=file  of  inreg;

var f:fisier;

Ca și pentru fișierele text , procedura ASSGN face legătura între numele fișierului din program și numele de pe suportul extern. Forma generală este :
ASSIGN(nume fișier în program,’nume estern’).
Numele extern este de tip string.
Exemplu : assign (f,’fișier’) unde f reprezintă numele variabilei fișier în program ier ‚fișier’ reprezintă numele sub care aceasta se găsește pe suport.

CREAEA FIȘIERELOR CU TIP


Pentru a putea realiza o astfel de operație , trebuie cunoscute câteva proceduri și funcții.
Procedura REWRITE are forma generală:
REWRITE (var fișier)
și are rolul de a deschide un fișier spre a fi creat în situația în care există un fișier cu același nume , acesta se distruge. Din acest motiv , este bine să se facă testul de existență .
Procedura WRITE are forma generală:
WRITE(var fișier,v1…vn)
Parametrii v1…vn reprezintă variabile ce vor fi scrise în fișier . Principiul de execuție este următorul:
• Se scrie prima înregistrare preluată din cadrul variabilei v1;
• Se scrie a doua înregistrare preluată din cadrul variabilei v2
.
.
.
• Se scrie înregistrarea n din cadrul variabilei vn;
• Pointer-ul se poziționează pe următoarea înregistrare.

Funcția booleană EOF are forma generală:
EOF (var fișier)
Și returnează TRUE dacă pointer-ul se găsește la sfârșit de fișier, în caz contrar returnează FALSE.
Procedura CLOSE are forma generală:
CLOSE (var fișier)
Și are rolul de a închide fișierul.
În programul care urmează , după fiecare înregistrare citită da la tastatură și scrisă în fișier, utilizatorul este întrebat dacă să se continue sau nu. După ce au fost scrise toate înregistrările, fișierul se închide.

program  ft1;

type inr= record

            nume:string[10];

            varsta:byte

          end;

fisier=file  of  inr;

var  inreg:inr;

     f1:fisier;

     c:char;

 

begin

  assign(f1,'fdat');

  rewrite(f1);

  repeat

    write('nume');

    readln(inreg.nume);

    write('varsta');

    readln(inreg.varsta);

    write(f1,inreg);

    write('comtinuati ? (y/n) ');

    readln (c);

  until c='n';

  close(f1)

end.

Evident , nu este obligatoriu ca un fișier să se creeze de la tastatură , e3l poate fi creat utilizând informații preluate din alte fișiere, însă pentru aceasta trebuie să știm cum se citește un fișier.
Pentru a fi citit, un fișier se deschide cu ajutorul procedurii RESET, care are forma generală:
RESET(var fișier).
Procedura READ are rolul de a citi una sau mai multe înregistrări ale unui fișier. Forma generală a acestei proceduri este:

READ (var fișier, v1,v2,…vn).

Principiul de execuție este următorul:
• Se citește înregistrarea pe care se află pointer-ul în variabila v1;
• Pointer-ul trece pe următoarea înregistrare care este citită în variabila v2;
• Procedeul continuă până când este citită variabila vn și pointer-ul se plasează pe următoarea înregistrare necitită sau pe marcajul de sfârșit de fișier.
Programul care urmează citește fișierul creat anterior și îl tipărește pe monitor.

program ft2;

type inr=record

           nume:string[10];

           varsta:byte

         end;

fisier=file  of  inr;

var  inreg:inr;

     f1:fisier;

 

begin

  assign(f1,'fdat');

  reset(f1);

  while not eof(fi) do

  begin

    read (f1,inreg);

    writeln(inreg.nume, ' ',inreg.varsta)

  end;

  close(f1)

end.


Aplicație:

Concatenare de fișiere

Dacă se dau două fișiere , prin operația de concatenare a lor se înțelege crearea cu ajutorul lor a unui al treilea fișier care conține înregistrările celor două în ordinea următoare: înregistrările primului fișier urmate de înregistrările celui de-al doilea fișier.
Programul care urmează concatenează două fișiere. În esență , pentru a realiza această operație, se procedează astfel:
• Se deschid toate fișierele (două pentru citire , unul pentru scriere);
• Toate înregistraările primului fișier se copiază în cadrul celui de-al treilea;
• Toate înregistrările celui de-al doilea fișier se copiază, în continuare, în cadrul celui de-al treilea;
• În final, se închid cele trei fișiere.

program ft3;

type  inr= record

             nume:string[10];

             varsta:byte

           end;

fisier=file  of  inr;

var inreg:inr;

    f1,f2,f3:fisier;

 

begin

  assign(f1,'fdat');

  assign(f2,'fdat1');

 

  assign(f3,'fdat2');

  reset(f1);

  reset(f2);

  rewrite(f3);

  while not eof(f1) do

  begin

    read (f1,inreg);

    write(f3,inreg);

  end;

  while not eof(f2) do

  begin

    read(f2,inreg);

    write(f3,inre4g);

  end;

  close(f1);

  close(f2);

  close(f3);

end.


PROCEDURA SEEK ȘI FUNCȚIA FILESIZE


Înregistrările unui fișier cu tip au aceeași lungime. Fiecărei înregistrări i se poate asocia un număr de ordine cuprins între 0 (pentru prima înregistrare) și n-1 (pentru înregistrarea n). Datorită lungimii fixe a înregistrărilor, acestea pot fi accesate direct (se poate poziționa pointer-ul pe înregistrarea cu un anumit număr de ordine). Este firesc să fie posibil acest lucru, întrucât dacă se dorește să poziționăm pointer-ul pe înregistrarea i, adresa de început a acesteia (a primului ei octet) se obține înmulțind lungimea unei înregistrări cu i (înregistrările sunt numerotate între 0 n-1).
Procedura SEEK are forma generală:
SEEK (var fișier, număr înregistrare)
Și are rolul de a poziționa pointer-ul pe înregistrarea cu numărul de ordine ’număr înregistrare’ .
Funcția FILESIZE având forma generală :
FILESIZE (var fișier)
Este tip longit și furnizează numărul de componente pe care le are fișierul. Dacă din rezultatul furnizat de această funcție se scade 1, obținem numărul de ordine al ultimei componente din fișier.
În programul care urmează , se listează un fișier utilizând funcția FILESIZE

program ft4;

type inr= record

            nume :string[10];

            varsta:byte

          end;

fisier=file  of inr;

var inreg;inr;

    f1:fisier;

    i:integer;

 

begin

  assign(f1,'fdat2');

  reset(f1);

  for i:=0 to filesiye(f1)-1 do

  begin

    read (f1, inreg);

    writeln(inreg.nume, ' ',inreg.varsta);

  end;

  close(f1)

end.

 

 

[vezi continuarea referatului ->]



NOTA IMPORTANTA:
ARTICOLELE PUBLICATE IN PAGINA DE REFERATE AU SCOP DIDACTIC SI SUNT ELABORATE IN URMA UNEI DOCUMENTARI SUSTINUTE. ESTE STRICT INTERZISA PRELUAREA ARTICOLELOR DE PE SITE SI PREZENTAREA LOR LA ORELE DE CURS. Referatele din aceasta sectiune sunt trimise de diferiti colaboratori ai proiectului nostru. Referatele va sunt prezentate pentru COMPLETAREA STUDIULUI INDIVIDUAL, si va incurajam si sustinem sa faceti si voi altele noi bazate pe cercetari proprii.

   Daca referatele nu sunt de ajuns, va recomandam pagina de download gratuit, unde veti gasi prezentari PowerPoint, programe executabile, programe pentru bacalaureat, teze nationale, etc. 

 

 

Home | BAC/Teze | Biblioteca | Referate | Games | Horoscop | Muzica | Versuri | Limbi straine | DEX

Modele CV | Wallpaper | Download gratuit | JOB & CARIERA | Harti | Bancuri si perle | Jocuri Barbie

Iluzii optice | Romana | Geografie | Chimie | Biologie | Engleza | Psihologie | Economie | Istorie | Chat

 

Joburi Studenti JOB-Studenti.ro

Oportunitati si locuri de munca pentru studenti si tineri profesionisti - afla cele mai noi oferte de job!

Online StudentOnlineStudent.ro

Viata in campus: stiri, burse, cazari, cluburi, baluri ale bobocilor - afla totul despre viata in studentie!

Cariere si modele CVStudentCV.ro

Dezvoltare personala pentru tineri - investeste in tine si invata ponturi pentru succesul tau in cariera!

 

 > Contribuie la proiect - Trimite un articol scris de tine

Gazduit de eXtrem computers | Project Manager: Bogdan Gavrila (C)  

 

Toate Drepturile Rezervate - ScoalaOnline Romania