Fișierele cu extensia txt sunt fișiere text. Rezumat: Fișiere text. Editore de fișiere text. Proceduri pentru deschiderea fișierelor text

TEMA #10:FIȘIERE. FIȘIERE TASATATE. FIȘIERE TEXT.

Noțiuni de bază

Fișiere este o structură de date numită pe un suport tehnic, care este o secvență de elemente (înregistrări) de același tip.

Fișiere este o matrice cu lungime variabilă și dimensiune nelimitată.

Fișierul poate face parte dintr-o altă structură complexă, dar nu trebuie să facă parte dintr-un alt fișier.

Diferența dintre un fișier și o matrice:

A) plasare pe medii externe;

B) lungimea fișierului nu este specificată;

C) locația elementului nu este determinată de index.

Pentru a desemna un fișier și a lucra cu el se folosește variabilă fișier(FP).

Variabila de fișier este o variabilă folosită în programe pentru a desemna și accesa un fișier.


Caracteristici ale variabilei fișierului:

Nu i se pot atribui nicio valoare.

Nu poate participa la operațiuni logice

Nu poate fi inclus în expresii matematice

Declarație de variabilă de fișier

Fișierul este declarat în secțiunea descriere variabilă indicând tipul elementelor fișierului.

Tip fișier

descrierea fisierului

Dactilografiat

Var F1: fișier întreg;

F2: fișierul char;

Nedactilografiat

Text

LUCRU CU UN DOSAR

A) ÎNREGISTRAREA FIȘIERULUI

Atribuie(FP, „Nume”);

Deschiderea unui fișier pentru scriere

Scrierea datelor într-un fișier

Scriere (FP, Date);

Writeln(FP, Date); - pentru text

Închiderea dosarului

B) CITIREA DIN DOSAR

Asociem un fișier (posibil inexistent) cu numele Nume cu o variabilă de fișier (FP)

Atribuie(FP, „Nume”);

Deschideți fișierul pentru citire (indicatorul este setat la primul element)

Citim datele din fișier în variabile și mutăm indicatorul fișierului înainte.

Citire(FP, Variabile);

Readln(FP, Variabile); - pentru text

Închiderea dosarului

Când lucrați cu un fișier, se folosește conceptul de indicator sau index de fișier, adică poziția capului magnetic într-un anumit loc din fișier.

DETERMINAREA LUNGIMII FIȘIERELOR TEXT

Nu există nicio comandă în Pascal care să determine numărul de linii scrise într-un fișier text. Cu toate acestea, există o funcție care vă spune când a ajuns indicatorul fișierului ultima linie - EOF (Sfârșitul fișierului)

EOF(FP) – funcția de confirmare

ajungând la sfârșitul fișierului text

Dacă se ajunge la sfârșitul fișierului, atunci EOF este adevărat.

Dacă nu se ajunge la sfârșitul fișierului, atunci EOF este fals.

Un exemplu de citire a unui fișier text care conține un număr necunoscut de linii. La sfârșitul programului vom afișa numărul de linii pe ecran.

Var f:text; N: întreg; s:șir;

Assign(f, 'c:\MyText. txt');

In timp ce Eof(f)=fals face ( Puteți scrie acest rând mai scurt: In timp ce nu Eof(f) do}

Writeln(„În fișierul c:\MyText.txt”, N, „linii”);

DETERMINAREA LUNGIMII UNUI FIȘIER BINAR

Pentru fișierele tip binar, metoda folosită la citire fișiere text. Funcția EOF funcționează la fel pentru fișierele text și binare.

În plus, atunci când lucrați cu fișiere binare, puteți utiliza funcția FileSize, care determină lungimea fișierului binar.

FileSize (FP) – funcție care returnează lungimea unui fișier binar

Un program care citește toate numerele dintr-un fișier întreg binar și găsește suma lor:

Var f: fișier întreg;

Summ, i, T:întreg;

Assign(f, 'c:\MyFile.int');

Pentru i:=1 la dimensiunea fișierului (f) face ( Puteți folosi o altă buclă: In timp ce nu Eof(f) do}

Writeln("Suma numerelor din fișierul c:\MyFile. int este ", Summ);

Writeln("Lungimea fișierului c:\Fișierul meu. int", Dimensiunea fișierului(f), "numerele");

NAVIGARE PRIN UN FIȘIER BINAR

Pentru fișierele binare, există o procedură Seek care mută indicatorul de citire și scriere în poziția dorită din fișier.

CĂUTA (FP, Poziție) – mută indicatorul

la o anumită poziție a fișierului

Un program care resetează un număr într-o locație dată într-un fișier real binar și adaugă acest număr la sfârșitul fișierului.

Var f: dosar de real; (declarăm o variabilă de fișier pentru un fișier real)

N:= FileSize(f); (să stabilim numărul de numere din fișier)

Repetați (începutul ciclului)

Writeln(„În fișierul ‘, N, ‘numerele’);

Writeln("Introduceți numărul numărului care ar trebui mutat la sfârșitul fișierului?’);

Până la (Poz>=0) și (Poz<=N) {выход из цикла, только если в данном файле такая позиция существует}

Seek(f, Poz); (poziționați indicatorul fișierului într-o poziție dată)

Read(f, R); (citim numărul din poziția dată fișierului în variabila R, indicatorul se deplasează cu o poziție înainte)

Seek(f, Poz); (readuce indicatorul la poziția specificată)

Scrie (f, Null); (resetăm numărul în care este setat indicatorul)

Căutare(f, N); (mutați indicatorul la sfârșitul fișierului)

Scrie (f, R); (scriem numărul din variabila R până la sfârșitul fișierului)

REDUCEREA FIȘIERELOR BINARE

Pentru a scurta un fișier binar, trebuie să setați indicatorul de fișier în locul dincolo de care se află informațiile inutile și să tăiați partea care nu este necesară folosind procedura Truncate.

trunchiați (FP ) procedură care trunchiază datele situate după pointerul fișierului

Un program care lasă doar primele 10 numere într-un fișier binar:

Var f: dosar de real; (declară o variabilă de fișier)

Assign(f, 'c:\MyRealFile. rlf'); (asociați o variabilă de fișier cu un fișier)

Resetare(f); (deschideți fișierul pentru citire și scriere)

Căutați (f, 10); (poziționați indicatorul fișierului într-o poziție dată)

trunchie(f); (decupăm din fișier tot ceea ce se află mai departe de indicatorul fișierului)

Adăugarea de informații la fișierele TEXT

Din păcate, atunci când lucrați cu fișiere text, nu există nicio modalitate de a introduce informații în mijlocul sau la începutul fișierului. Singura modificare posibilă a fișierului este posibilitatea de a adăuga linii la sfârșitul fișierului. Pentru a face acest lucru, fișierul trebuie să fie deschis pentru adăugare.

Apend(FP)– o procedură care deschide un fișier text

pentru a adăuga linii

Un program care adaugă două linii la sfârșitul unui fișier text:

Var FT: text; s:șir;

Atribuire(FT, 'q.txt');

S:=’Primul rând adăugat’; Writeln(FT, S);

S:=‘A doua linie adăugată’; Writeln(FT, S);

REDENUMIRE, TRANSFERĂ FIȘIER

Când lucrați cu plasarea informațiilor pe un disc, ar trebui să fiți conștienți de faptul că atunci când transferați informații dintr-un folder (spre deosebire de copiere, unde este creată o copie a datelor) pe altul, nu există un transfer efectiv de date. La transferul de informații dintr-un folder în altul, se schimbă doar calea în fișier, adică, de fapt, se schimbă doar numele fișierului.

Prin urmare, în Pascal, aceeași comandă realizează atât redenumirea unui fișier, cât și mutarea unui fișier între directoare.

Redenumiți (FP, New_file_name) o procedură care redenumește un fișier și îl mută într-un director,

specificat în Nume fișier nou.

Comanda Redenumire funcționează numai pe fișierele închise (sau care nu sunt încă deschise). Prin urmare, înainte de a-l folosi, nu este nevoie să deschideți fișierul pentru a citi, scrie sau adăuga date. Sau, dacă fișierul este deja deschis, mai întâi ar trebui să îl închideți.

Programul trebuie să dea fișierului „q1.txt” un nume nou, pe care utilizatorul îl va introduce și să transfere fișierul „q2. TXT'a cataloga'c:\ Document\’.

Var FT: text; s:șir;

Atribuire(FT, 'q1.txt'); (asociați o variabilă de fișier cu un fișier)

Writeln('Introduceți un nume nou pentru fișierul q1.txt');

Readln(e); (citim noul nume de fișier în variabila s de la tastatură)

Redenumiți(FT, s); (redenumiți fișierul)

Atribuire(FT, 'q2.txt'); (asociem variabila fișier cu al doilea fișier)

Redenumire(FT, 'c:\Document\q2.txt'); (mutați fișierul în directorul specificat cu același nume)

Pentru a transfera un fișier pe o altă unitate, trebuie să copiați fișierul și apoi să-l ștergeți în locația sa inițială

COPIEREA ȘI ȘTERGEREA UNUI FIȘIER

Copie: Pentru a copia un fișier, trebuie să citiți toate înregistrările unui fișier și să le scrieți în fișierul nou creat.

Eliminare: Pentru a șterge un fișier, aplicați pur și simplu procedura de ștergere variabilei fișierului (asociată cu fișierul închis).

ŞTERGE (FP) o procedură care șterge un fișier asociat cu o variabilă de fișier.

Programul copiază fișierul de pe unitatea „C” pe disccLa 'D„și șterge originalul de pe unitatea „C” (de fapt, programul transferă fișierul de pe o unitate pe alta)

Var f1, f2: fișier de octet;

Assign(f1, 'c:\MyFile.int'); Resetare(f1); (deschideți fișierul exemplu pentru citire)

Assign(f2, 'd:\MyFile.int'); Rescrie(f2); (creați un fișier pe unitatea D)

In timp ce nu Eof(f1) do

Citiți(f1, b); (citim datele din fișierul original)

Scrie (f2, b); (scriem datele într-un fișier nou)

Închidere(f1); (închideți fișierul eșantion, fișierul trebuie șters înainte de ștergere)

Închidere(f2); (închideți fișierul nou)

Șterge (f1); (sterge fisierul)

LUCRU CU CATALOGURI

MkDir (Numele directorului) – Procedură creează una nouă catalog

(Dacă există un director cu același nume, va apărea o eroare)

RmDir(Nume director) – procedură sterge catalog

(Doar un director gol poate fi șters)

ChDir (Nume director) – procedură schimba curentul catalog

(Directorul curent este un director a cărui cale nu trebuie specificată atunci când lucrați cu fișiere. Când porniți un program, directorul curent este directorul în care se află programul.)

Pentru redenumire catalog necesar :

a) Creați un director nou

b) Mutați toate fișierele acolo

c) Ștergeți vechiul director

Programul redenumește directorul „c:\Cat\”, în care se află două fișiere „q1.txt” și „q2.ini”, în directorul „c:\CatNew\’ și face directorul actual.

Var f1,f2: fișier de octet; b:octet;

MkDir("c:\CatNew"); (creează un director nou)

(copiați fișierul q1.txt în noul director)

Assign(f1, 'c:\Cat\q1.txt'); Resetare(f1);

Assign(f2, 'c:\CatNew\q1.txt'); Rescrie(f2);

In timp ce nu Eof(f1) do

ÎNCEPE Citiți(f1, b); Scrieți(f2, b); Sfârşit;

(copiați fișierul q2.ini în noul director)

Assign(f1, 'c:\Cat\q2.ini'); Resetare(f1);

Assign(f2, 'c:\CatNew\q2.ini'); Rescrie(f2);

In timp ce nu Eof(f1) do

ÎNCEPE Citiți(f1, b); Scrieți(f2, b); Sfârşit;

Închidere(f1); Închidere(f2); Șterge (f1);

RmDir('c:\Cat'); (Ștergerea directorului vechi)

ChDir('c:\CatNew'); (faceți noul director actual)

Cauta fișiere

Programatorul nu știe întotdeauna ce fișiere se află în ce directoare și ce directoare se află pe ce discuri. Prin urmare, un subiect important în manipularea fișierelor este găsirea fișierelor (și directoarelor).

Pentru a căuta fișiere, există două proceduri situate în modul WinDos:

FindFirst(Mască, steag, receptor de informații)– caută primul fișier care se potrivește cu „mască” și „steagul” dacă este găsit, transferă datele despre fișierul găsit (director) într-o variabilă de tipul; TSearchRec(„receptor de informații”)

GăsiUrmătorul (Information_receiver)– caută următorul fișier care îndeplinește condițiile stabilite în procedura FindFirst, dacă este găsit, transferă date despre fișierul găsit (director) într-o variabilă precum TSearchRec(„receptor de informații”)

Modul WinDos contine si o variabila DosEroare, care rămâne zero atâta timp cât comenzile de căutare găsesc un fișier care se potrivește cu condiția de căutare. Dacă comenzile de căutare nu au găsit fișiere care corespund condiției, atunci variabila

masca de cautare - un șir care conține numele fișierului sau directorului care trebuie căutat. Pe lângă caracterele obișnuite, masca poate conține „*” și „?”.

* - înseamnă că în fișierul dorit la o anumită locație poate exista orice număr de caractere;

? – înseamnă că orice caracter poate fi prezent într-o anumită locație din fișierul căutat.

Exemple de măști:

"*.* ’ – orice fișier cu orice extensie

"căutare.*„ – fișier cu numele „quest” și orice extensie

"*.TXT„ – fișier cu orice nume și extensie „txt”

"qust?.txt„ – un fișier cu extensia „txt”, care conține 5 litere în nume, primele 4 dintre acestea fiind „qust”, iar al 5-lea caracter este orice

"qust*.txt" - un fișier cu extensia „txt”, ale cărui primele patru litere sunt „qust”, numărul de litere ulterioare nu este limitat

"quest. TXT’ – fișier cu numele „quest” și extensia „txt”

Căutare steag - un set de constante speciale conectate de operatorul SAU.

În loc de constante, puteți utiliza un număr egal cu suma numerelor cu constantele corespunzătoare

Steag

Tip fișier

Număr

faReadOnly

Căutați cu atributul Numai citire

faHidden

Căutați cu atributul „Ascuns”.

faSysFile

Căutați cu atributul „Sistem”

faVolumID

Returnează ID-ul media

faDirectory

Returnează informații despre director

faArhive

Căutați cu atributul „Arhivă”.

faAnyFile

Activați toate steaguri anterioare

Exemple de steaguri:

· faReadOnte iubesc sau FaHidden – 3 - caută fișiere care au atributul „ascuns” sau „numai citire”.

· faDirectoty sauFaSysFile - 20 – caută directoare și fișiere care au setat atributul „Sistem”.

receptor de informații - variabilă de tip TSearchRec, care va conține date despre fișierul găsit

Tipul TSearchRec este descris în modulul WinDos și nu necesită o descriere prealabilă de către programator. Acest tip este o înregistrare de următoarea formă:

Tastați TSearchRec = Înregistrare

Umplere: Matrice de octeți; (Parametru de sistem, nu este folosit de noi)

Attr: Byte; (Parametru care conține date de semnalizare fișier)

Timp: LongInt; (Timp de creare a fișierului)

Dimensiune: LongInt; (Dimensiunea fișierului în octeți)

Nume: Array of Char; (Nume de fișier)

Să presupunem că avem o variabilă SR, care este de tip TSearchRec. După ce îl utilizați în comanda FindFirst, acesta va conține informații despre fișierul găsit (director.)

Informațiile despre numele fișierului vor ajunge în SR. Nume, aproximativ dimensiunea fișierului în SR. Dimensiune și pentru a determina dacă fișierul este sistem, trebuie să conectați valoarea SR. Attr cu constanta FaSysFile și operatorul And. Fișierul este sistem dacă rezultatul este mai mare decât zero.

Exemplu :

DACĂ Sr. Attr și FaSysFile > 0 THEN Writeln('Sistem');

Programul caută în directorul „c:\Doc” toate fișierele cu extensia „txt”. Și afișează numele celor a căror dimensiune este mai mare de 3000 de octeți.

Utilizează Dos, crt, WinDos;

Var SR: TSearchRec; (Descriem o variabilă în care vom stoca informații despre fișierele găsite)

clrscr; ChDir("c:\Doc"); (Schimbați directorul curent)

FindFirst("*.txt",faAnyFile, SR); (Căutăm primul fișier din directorul curent cu extensia „txt” și orice set de steaguri, rezultatul este stocat în variabila SR)

while DosError=0 do (rulați bucla în timp ce fișierele sunt localizate)

dacă SR. Dimensiune > 3000 (dacă dimensiunea fișierului este mai mare de 3000 de octeți)

apoi scrieln(SR. Nume); (Afișează numele fișierului găsit pe ecran)

Programul caută toate directoarele aflate pe disc în directorul rădăcină al unității „C” și afișează o listă de directoare în fișierul „c:\info. TXT’ și pe ecran (directorul rădăcină al unității „C” este directorul „c:\”).

Utilizează Dos, crt, WinDos;

Var SR: TSearchRec; f:text;

Clrscr; Atribuire (f, "c:\info. txt"); Rescrie(f);

ChDir("c:\"); (Mergeți la directorul rădăcină)

FindFirst("*",faDirectory, SR); (Căutăm un fișier fără extensii, inclusiv directoare)

In timp ce DosError=0 do(rulăm bucla în timp ce fișierele sunt localizate)

dacă SR. Attr și faDirectory>0 atunci (dacă fișierul are atributul „Directory”)

Writeln(SR.Nume); (afișează numele fișierului pe ecran)

Writeln(f, Nume Sr.); (ieșiți numele fișierului în fișierul „c:\info. txt”)

FindNext(SR); (Se cauta urmatorul fisier)

Proceduri de lucru cu variabile de fișier

Procedură

Scop

cometariu

Atribuiți(f, „nume”)

Leagă o variabilă de fișier la un anumit fișier (leagă variabila la numele fișierului). Plasat înainte de prima utilizare a unei variabile de fișier.

Puteți seta numele fișierului „nume” printr-o variabilă șir (S): Assign(f, S)

Resetare(f)

Deschide un fișier existent și setează indicatorul la începutul intrării.

Pentru orice fișiere

Rescrie (f)

Creează un nou fișier gol, setează un pointer la începutul fișierului. Dacă fișierul a existat, conținutul său este distrus.

Pentru orice fișiere

Închide (f)

Se închide deschide fișierul

Pentru orice fișiere

Șterge (f)

Șterge un fișier închis anterior

Pentru orice fișiere

Redenumiți (f, f1)

Redenumește fișierul f în fișierul f1. Fișierul f trebuie închis anterior

Pentru orice fișiere

Citiți(f, v1,…vn)

Scrieți (f, v1,...vn)

Scrie valorile variabilelor v1,...vn în fișierul f

Pentru fișiere tastate și neînregistrate

Readln(f, v1,..vn)

Citește intrările din fișierul f în variabilele v1, ..vn

Scrieți(f, v1,.vn)

Scrie valorile variabilelor v1,..vn în fișierul f

nu este permis în fișierele tastate

Anexați(f)

Deschide un fișier și setează indicatorul la marcajul de sfârșit al fișierului

Folosit pentru a adăuga intrări

caută (f, n)

Setează un indicator pentru înregistrarea numărului n

trunchie(f)

Decupează toate înregistrările după indicator și scrie un semn de sfârșit de fișier în această poziție.

Funcții atunci când lucrați cu variabile de fișier

Procedură

Scop

cometariu

Obținerea de informații despre sfârșitul fișierului Adevărat dacă indicatorul este la sfârșitul fișierului, în caz contrar - Fals

Funcția logică.

Adevărat dacă indicatorul se află la sfârșitul liniei, în caz contrar Fals

Funcția logică. Pentru text fişiere

N:=dimensiunea fișierului (F);

Determinarea numărului de înregistrări dintr-un fișier

N:=filepos(f)

Returnează numărul înregistrării la care indică indicatorul de înregistrare. Prima intrare este numărul 0.

Exemple de programe

SARCINA 1: Scrieți un programscrie date despre autor și 20 de numere aleatorii într-un fișier text

randomizare; (Configurarea unui generator de numere aleatoare)

rescrie(f); (deschide fisierul pentru scriere)

r:=aleatoriu(10); (generăm un număr aleatoriu de la 1 la 10)

STR(r, s); (convertiți numărul r în șirul s)

scrieln(f, s); (scrieți un șir cu un număr într-un fișier)

aproape(f); (închideți fișierul)

SARCINA 2: Scrieți un programcitind date despre autor și 20 de numere aleatorii dintr-un fișier text

r, i,c: întreg;

assign(f,"dddddd. txt"); (asociem variabila fișier cu fișierul)

resetare(f); (deschide fișierul pentru citire)

pentru i:=1 până la 20 do (include un ciclu de 20 de repetări)

readln(f, s); (citește numărul din fișier în rândurile s)

val(s, r, c); (traduceți șirul „s” în numărul „r”, în variabila „c” posibilul cod de eroare)

dacă c=0 atunci scrieln(r); (dacă nu a existat nicio eroare (c=0), atunci afișăm numărul pe ecran)

aproape(f); (închideți fișierul)

SARCINA 3: Calculați rădăcinile unei ecuații pătratice și scoateți rezultatele într-un fișier.

Var a, b,c, x1,x2, d: real;

Atribuire(f,’rezultat. txt); (asociem fisierul cu variabila fisierului f)

Rescrie(f); (deschide fisierul pentru scriere)

(Citim datele sursă de la tastatură și le trimitem într-un fișier)

Writeln(f, „soluție la ecuația pătratului”);

Writeln(f, "a=",a:6:3,"b=", b:6:3,"c=",c:6:3);

(Calculați rădăcinile unei ecuații pătratice)

Dacă d>=0 atunci Începe X1:=-b+sqrt(d)/(2*a); X2:=-b-sqrt(d)/(2*a); Sfârşit;

(Ieșiți rezultatul într-un fișier)

Dacă d<0 then writeln(f,’у урав-я нет корней’)

else writeln(f, ‘rădăcini: x1=’, x1:6:3,’x2=’, x2:6:3);

(Închideți fișierul și terminați programul)

Writeln('rezultatele programului în fișierul rezultat. txt');

Există un fișier pe disc numit Karl. txt, care conține răsucitorul de limbi: „Karl a furat corali de la Clara, Clara a furat clarinetul lui Karl”. Trebuie să numărați numărul de litere „K”

Var f:text; s:întreg; a:char;

(Asociem fișierul cu o variabilă de fișier și îl deschidem pentru scriere)

Atribuire(f,’Karl. txt’); Resetare(f);

(căutați consecutiv toate rândurile fișierului până la ultima)

Deși nu eof(f) face

(citim secvențial toate caracterele șirului până la ultimul din șir și îl comparăm cu „k”)

Deși nu eoln(f) face

Începeți citirea(f, a); Dacă a=’k’ atunci s:=s+1; Sfârşit;

(treceți la următoarea linie a fișierului)

Introduceți text într-un fișier text f1. Rescrieți o linie din fișierul f1 în f2 - prima jumătate a fișierului înainte și a doua în ordine inversă a caracterelor.

Var f1,f2:text; s, snew, sa, sb: sfoară; n, y,i: întreg;

(Asociați fișierele cu variabilele fișierului)

Atribuire(f1,’fișier1’); Atribuire(f2,’fișier2’);

(Citim o linie de la tastatură și o trimitem la dosarul nr. 1)

Rescrie(f1); Readln(e); Writeln(f1,s); Închidere(f1);

(Citind un rând din dosarul nr. 1)

Resetare(f1); Read(f1,s1); Închidere(f1);

(Găsiți mijlocul liniei)

N:=lungime(s1); Y:=n div 2;

(În noua variabilă scriem prima jumătate a liniei în ordine înainte, a doua jumătate în ordine inversă)

Pentru i:=1 la y face

Snew:=Snew+s1[i];

Pentru i:=n până la y+1 do

Snew:=sew+s1[i];

(Scrie linie nouă la dosarul nr. 2)

Rescrie(f2); Writeln(sNew); Scrie(f2,sNew); Închidere(f2);

Setul de reguli prin care datele sunt stocate într-un fișier se numește format de fișier. Diferite tipuri de fișiere, cum ar fi fișiere text, grafice raster etc., utilizează formate diferite. În general, mai multe formate diferite pot fi definite pentru același tip de fișier, deși tipul și formatul de fișier înseamnă adesea același lucru. Un format de fișier este identificat prin extensia numelui de fișier care este adăugată la numele fișierului atunci când este salvat într-un format specific, cum ar fi DOC, GIF etc.

De obicei, formatele de fișiere sunt create pentru a fi utilizate într-un program de aplicație strict definit. De exemplu, obiectele grafice create în binecunoscutul pachet de grafică vectorială CorelDRAW sunt salvate ca fișiere cu extensia CDR, iar imaginile generate de un alt pachet grafic, CorelXara, sunt scrise pe disc ca fișiere cu extensia XAR. Unele formate nu sunt asociate cu aplicații specifice, adică sunt universale. Unul dintre cele mai cunoscute formate universale este formatul TXT (formatul de fișier text DOS).

Comprimarea fișierelor de pe computer este adesea folosită pentru a economisi spațiu de stocare. Există multe modalități de a comprima fișiere. Aceste metode depind de formatul fișierului sursă. În general, cu cât raportul de compresie este mai mare, cu atât operațiunile de citire și scriere sunt mai lente.

În ceea ce privește algoritmii de compresie, există atât algoritmi de compresie fără pierdere de date, cât și algoritmi care pot duce la pierderea datelor.

Compresia fără pierderi asigură că toate datele care erau în fișier înainte de comprimare vor fi prezente după ce fișierul este decomprimat. Mecanismele de compresie fără pierderi sunt utilizate atunci când stocați text sau date numerice, cum ar fi foi de calcul sau fișiere de document. Exemple de algoritmi de compresie fără pierderi includ bine-cunoscuții algoritmi ZIP, ARJ și alții.

Să dăm o scurtă descriere a principalelor formate utilizate:

§ Codul standard american pentru schimbul de informații ASCII (TXT). Format de fișier text dezvoltat de Institutul Național American de Standarde. Sprijinit de toate sistemele de operare și toate programele. Este un fișier text în codificare DOS, nu există nicio funcție de inserare a unei imagini, nu există formatare, funcționează pe toate mașinile, este posibil să se creeze doar fișiere mici.



§ ANSI (TXT). Format de fișier text ANSI (pentru pagina de coduri Microsoft Windows)

§ MsWord pentru DOS, Windows (.DOC). Formatul documentului, dezvoltat de Microsoft Corporation, este suportat de programele MS-DOS și de majoritatea procesoarelor de text. Păstrează formatarea originală a documentelor, precum și stilurile de caractere. Pe lângă informațiile text, fișierele în acest format pot conține imagini grafice cu diverși parametri. Suporta 256 de culori. Nu suporta compresia. Folosit în principal pentru a face schimb de date de text formatate între diferite platforme și aplicații.

§ Limbajul de marcare hipertext HTML (HTM, HTML). Limbajul de marcare pentru documente hipertext. Toate paginile aflate pe Internet sunt create folosind acest limbaj special. Documentele HTML sunt fișiere ASCII care pot fi vizualizate și editate în orice editor de text. Diferența față de un fișier text obișnuit este că documentele HTML conțin comenzi speciale de etichetă care definesc regula de formatare a documentului. Dacă reușiți să stăpâniți limbajul HTML, atunci puteți crea pagini pentru Internet. Adăugând etichete (etichete) textului simplu, forțați vizualizatorul să afișeze acel text într-un anumit mod și să plaseze imagini pe pagină. Dacă ați învățat Java și JavaScript, știți cum să extindeți HTML prin plasarea comenzilor scrise într-un limbaj de scripting în interiorul etichetelor.

§ Portable Document Format PDF (.PDF). Acest format de stocare a documentelor, dezvoltat de Adobe, pretinde a fi un standard tipografic deschis pentru Web. Este văzut ca o alternativă la HTML. Dezavantajul HTML este că documentele traduse în HTML de obicei nu păstrează formatul original, iar HTML oferă un număr foarte limitat de fonturi atunci când sunt vizualizate. În schimb, utilizatorii instrumentelor Acrobat și PDF pentru crearea, partajarea și vizualizarea documentelor în formatul lor original știu că cititorii vor vedea publicația exact așa cum a fost creată. Formatul PDF este indispensabil dacă trebuie să obțineți o copie exactă a documentului solicitat. Ca exemplu de utilizare cu succes a PDF-ului pentru documente în limba rusă, vom oferi serverului Moscow News pe Internet. Materialele prezentate pe acesta în formă electronică reproduc complet originalul hârtiei tipărite.

§ Standard Generalized Markup Language (SGML). Dezvoltarea HTML se traduce într-un limbaj de marcare generalizat standard. Este un set de instrumente de mecanisme pentru crearea documentelor structurate marcate folosind descriptori (etichete). În comparație cu HTML, oferă opțiuni de formatare mai flexibile și versatile pe Web. Cu toate acestea, SGML are și o viteză crescută, astfel încât PDF este folosit ca un instrument mai simplu. Puterea SGML constă în abordarea sa structurată pe mai multe platforme pentru a descrie conținutul documentelor. SGML este de fapt un metalimbaj, adică. este destinat să descrie limbaje de marcare utilizate pentru a crea documente.

Fișiere text constau din siruri de caractere. Liniile pot avea lungimi diferite, iar fiecare linie are un terminator de linie la sfârșit. Pentru a descrie fișierele text, se folosește cuvântul de serviciu Text:

Var A: Text;

Pentru a procesa fișiere text, sunt utilizate aceleași proceduri și funcții ca și pentru procesarea fișierelor tipărite obișnuite. Pentru a asocia o variabilă de fișier cu un fișier de pe disc, utilizați procedura de atribuire. Fișierele text pot fi deschise pentru citire cu procedura Resetare sau pentru scriere cu procedura Rescriere.

Procedura Read este utilizată pentru a citi datele. Dacă este necesar să treceți la linia următoare după citirea datelor, atunci se utilizează procedura Readln. Dacă doriți doar să treceți la linia următoare, puteți utiliza Readln(<>); care setează indicatorul fișierului la primul element al liniei următoare.

Procedura Write scrie date pe rândul curent. Dacă trebuie să scrieți date și să treceți la linia următoare, puteți utiliza procedura Writeln. Dacă trebuie doar să mergeți la o nouă linie pentru a scrie, atunci Writeln(<имя файловой переменной текстового файла>); care scrie un terminator de linie în fișier și setează indicatorul de fișier la începutul liniei următoare.

Deoarece liniile pot avea un număr diferit de caractere, există o funcție booleană Eoln(< numele variabilei fișierului fișierului text >) , care se evaluează la True dacă se ajunge la sfârșitul liniei.

Procedură Adăuga(< numele variabilei fișierului fișierului text >). Deschide fișierul pentru „adăugați”, plasând indicatorul fișierului la sfârșitul fișierului.

Exemplu: Având în vedere un fișier text care conține numai numere întregi, fiecare linie poate conține mai multe numere care sunt separate prin spații. Afișați toate numerele ținând cont de împărțirea în linii și numărați numărul de elemente din fiecare linie.

Soluție: Lăsați fișierul să conțină următoarele informații:

4 5 9 13 11 -5 -8

Acest fișier poate fi creat în mediul Turbo Pascal după cum urmează:

* creați un fișier nou folosind comanda Nou meniul Fişier;

* scrieți toate numerele, separându-le cu spații și despărțiți-le în rânduri așa cum este indicat în sarcină;

* salvați fișierul, de exemplu, sub numele INT1.DAT

* acum să scriem un program

program rrr;

var f:text;

Assign(f,’int1.dat’);

În timp ce Not Eof(f) do (până când se ajunge la sfârșitul fișierului)

În timp ce Not Eoln(f) do (până când se ajunge la sfârșitul liniei)

citiți(f,x); (citește următorul număr)

scrie(x,’’); (o afișăm pe ecran)


Inc(k); (mărește contorul)

writeln('in linie', k, 'elemente');

Readln(f) (mergeți la următoarea linie a fișierului)

Exemplu. Scrieți o matrice bidimensională 5x4 de numere reale într-un fișier de test.

Program mas;

const m=5; n=4;

Var fil:text;

Assign(fil,'massiv.txt');

pentru i:=1 la m do

pentru j:=1 la n face

scrie(fil,a:5:3,’ ‘); (numărul este scris în fișier în formatul specificat, urmat de un spațiu)

writeln(fil); (mergi la o nouă linie în fișier)

(Citirea unui fișier și afișarea matricei linie cu linie)

Reset(fil); (deschiderea unui fișier existent)

in timp ce nu Eof(fil) do

in timp ce nu Eoln(fil) do

read(fil,a); (citind numarul)

read(fil,s); (citiți spațiu după număr)

Exemplu. Având în vedere un fișier text f. Copiați toate componentele în fișierul g fișier sursă f în ordine inversă.

program tofile;

var f, g: text;

n, i, j: întreg;

x: matrice de caractere;

atribui (f,'f.txt'); assign(g,’g.txt’);

rescrie(g); rescrie(f);

writeln('Introduceți numărul de linii în fișierul pe care îl creați');

writeln(‘introduceți linii, după ce ați introdus fiecare linie, apăsați Enter’);

pentru i:=1 la n începe readln(s); scrie (f,s); Sfârşit;

writeln('Fișier sursă:');

în timp ce (nu eof(f)) și (i<32000) do

începe i:=i+1; citeste(f,x[i]); scrie(x[i]); Sfârşit;

writeln('Fișier schimbat:');

pentru j:=i downto 1 do

începe scrierea(g,x[j]); scrie(x[j]); Sfârşit;

aproape(f); aproape(g);

Sarcină. Dat un fișier text. Introduceți numărul său la începutul fiecărei linii și scrieți liniile convertite într-un fișier nou.

Sarcină. Sunt date două fișiere text. Scrieți în al treilea fișier numai acele linii care sunt atât în ​​primul cât și în cel de-al doilea fișier.

INTRODUCERE

Aproape fiecare utilizator de computer întâmpină nevoia de a pregăti anumite documente - scrisori, articole, memorii, rapoarte, materiale publicitare etc. Desigur, aceste documente pot fi pregătite fără computer, de exemplu la o mașină de scris. Cu toate acestea, odată cu apariția computerelor personale, a devenit mult mai ușor și mai convenabil și, prin urmare, mai profitabil, pregătirea documentelor folosind computere.

Când utilizați computerele personale pentru a pregăti documente, textul documentului care este editat este afișat pe ecran, iar utilizatorul poate face modificări online. Toate modificările efectuate sunt afișate imediat pe ecranul computerului, iar apoi la imprimare, este afișat text frumos și corect formatat, care ține cont de toate corecțiile făcute de utilizator. Utilizatorul poate transfera fragmente de text dintr-un loc în altul din document, poate folosi mai multe tipuri de fonturi pentru a evidenția secțiuni individuale de text și poate imprima documentul pregătit pe o imprimantă în numărul necesar de copii.

Comoditatea și eficiența utilizării computerelor pentru pregătirea textelor a condus la crearea multor programe de prelucrare a documentelor. Se numesc astfel de programe editori de text(Procesoare de cuvinte). Capacitățile acestor programe sunt variate - de la programe concepute pentru pregătirea documentelor mici cu o structură simplă, la programe de dactilografiere, proiectare și pregătire completă pentru tipărirea cărților și revistelor (sisteme de editare).


Înainte de a începe să explorați meniul Editor MS-DOS, ar trebui să exersați tastarea. Textul este tastat de la tastatură ca la o mașină de scris obișnuită la sfârșitul fiecărei rânduri, se apasă Enter.

Pentru a împărți o linie prea lungă în două, apăsați Enter unde ar trebui să fie sfârșitul liniei.

Fiecare apăsare a Enter adaugă o linie goală. Dacă se formează exces linii goale, șterge-le poți apăsa Shay Del.

Puteți corecta erorile din text deplasând cursorul pe câmpul de lucru folosind tastele sau mouse-ul. Pentru a șterge un caracter, utilizați tasta Del dacă cursorul se află înaintea caracterului pe care doriți să-l ștergeți sau tasta Backspace dacă cursorul se află după caracter.

Dacă trebuie să ștergeți un caracter doar pentru a introduce altul în locul lui, este mai convenabil să comutați tastatura în modul de înlocuire. Implicit, tastatura este în modul de inserare. Tasta Ins comută între modurile de inserare și de înlocuire.

Când sunt introduse, toate caracterele ulterioare sunt deplasate la dreapta.

Când este înlocuit, caracterul curent dispare.

Documentele create în Editorul MS-DOS pot fi salvate în fișiere text pentru a face acest lucru, utilizați meniul Salvare fișier. Meniul File Save As... vă va permite să salvați fișierul sub un alt nume.

Pentru a șterge editorul și a începe să lucrați la un fișier nou, utilizați meniul Fișier nou. Pentru a încărca un fișier gata făcut în editor, utilizați meniul Deschideți fișierul.În panoul de dialog, selectați numele fișierului dorit cu cursorul. Meniul File Print vă permite să imprimați fie o parte selectată a unui document, fie întregul text.

Printre editorii de text simpli din Rusia, LEXICON este cel mai utilizat.

Procesor de text Lexicon

Procesor de text Lexicon dezvoltat E.N.Veselovîn 1985 la Centrul de calcul al Academiei de Științe a URSS. Din 1991 furnizat de companie Microinform. Are o interfață în limba rusă și vă permite să pregătiți documente simple cu text în rusă și engleză. LEXICON își umple cu succes „nisa ecologică” - este destul de potrivit pentru cei care au nevoie de un instrument simplu pentru pregătirea documentelor mici și necomplicate și nu necesită o calitate ridicată de imprimare.

Pentru a începe să lucrați la un fișier nou, trebuie să dați comanda de meniu Text clar sau utilizați orice fereastră Lexicon gratuită. Există un total de 10 ferestre disponibile, iar apăsând A + „qi fra pe tastatura alfanumerica, puteti merge la fereastra cu numarul corespunzator.

Pentru a încărca un fișier gata făcut, utilizați comanda de meniu Descărcați textși selectați numele fișierului dorit în meniu cu cursorul.

Comanda de meniu Text Print t Start vă va permite să imprimați un document pe o imprimantă dacă comutatorul PRINTER1FILE 1SCREEN este setat în poziția PRINTER. Când vă aflați în poziția SCREEN, puteți vedea exact cum va arăta textul imprimat pe imprimantă.

Editor MS-Word

Iată doar câteva dintre funcțiile acceptate de Word:

· utilizarea multor fonturi diferite (dimensiuni și stiluri) de caractere și diferite moduri de evidențiere a acestora (aldine, cursive, caractere subliniate etc.); specificarea parametrilor paragrafelor de text și paginilor documentului; introducerea textului pe mai multe coloane; tipărirea anteturilor și subsolurilor de orice tip; generarea automată a unui cuprins și a diferitelor tipuri de indici;

· proiectarea tabelelor și a paragrafelor „cot lângă altul”; includerea de desene (fișiere grafice); plasarea paragrafelor (de exemplu, imagini) oriunde pe pagină (restul textului se poate „îndoi” în jurul imaginii).

Utilizatorii experimentați apreciază cu adevărat caracteristicile stilului Word. Word vă permite să înregistrați în așa-numita foaie de stil toți parametrii celor mai frecvent utilizate tipuri de formatare a textului: paragrafe, caractere și secțiuni de document. Dacă faceți acest lucru, atunci oricărei părți a textului i se poate atribui unul dintre tipurile de design „standard” folosind una sau doua apăsări de taste. Acest lucru nu numai că accelerează semnificativ tastarea documentelor, dar crește și flexibilitatea designului acestuia. De exemplu, pentru a schimba fontul și locația tuturor titlurilor de un anumit nivel (să zicem, titlurile de paragraf), nu trebuie să căutați aceste titluri și să le schimbați manual formatarea - doar corectați stilul pentru aceste titluri și acestea vor fi automat. luați designul dorit.

Shift+Ctri cu "M"„1”, "N""CU", «(»și „5” (în partea dreaptă a tastaturii) sunt rezervate.

De fapt, există mult mai multe combinații „interzise”. Dacă definiți combinații cu Shift pentru programele dvs., atunci din când în când utilizatorul va „cădea” în mod complet neașteptat din editorul de text atunci când încearcă să scrie o literă majusculă, iar combinațiile cu Alt nu vor fi în zadar atunci când lucrează în programe în care opțiunile de meniu sunt apelate de Alt+litera- la fel ca în MS-DOS Shell în sine. În Microsoft Word, aproape toate combinațiile de taste posibile sunt rezervate nevoilor interne!

Comutatorul de sarcini în sine este un program DOSSWAP.EXE care se încarcă înainte ca orice program de aplicație să fie executat și se iese după ce programul se închide, revenind la MS-DOS Shell. Programul DOSSWAP ocupă aproximativ 30 KB de RAM.

Fișiere text

Fișierele text sunt concepute pentru a stoca informații text. În astfel de fișiere sunt stocate, de exemplu, codurile sursă ale programelor. Componentele fișierelor text pot avea lungime variabilă, ceea ce afectează semnificativ modul în care lucrați cu ele. Fiecare linie a unui fișier text Pascal poate fi accesată numai secvenţial, începând de la prima. Procedurile de atribuire, resetare, rescrie, citire, scriere și funcția eof sunt aplicabile fișierelor text. La crearea unui fișier text, un semn special EOLN (sfârșitul rândului) este plasat la sfârșitul fiecărei înregistrări (linii). Pentru a determina dacă a fost atins sfârșitul unei linii, există o funcție logică cu același nume EOLN(<имя_ф_переменной>), care se evaluează ca adevărat dacă se ajunge la sfârșitul șirului.

Pe lângă procedurile de citire și scriere, atunci când se lucrează cu fișiere text, se folosesc varietățile lor readln și writeln. Diferența este că procedura writeln, după ce a scris lista dată, scrie un marcator special de sfârșit de linie în fișier. Acest semn este perceput ca o tranziție către o nouă linie. Procedura readln, după ce citește o listă dată, caută următorul terminator de linie din fișier și se pregătește să citească de la începutul liniei următoare.

Un exemplu de rezolvare a unei probleme cu fișiere

Să presupunem că trebuie să creăm un fișier text și apoi să copiem din acest fișier în al doilea doar acele linii care încep cu litera „A” sau „a”.

Soluţie: vom avea nevoie de două variabile de fișier f1 și f2, deoarece ambele fișiere sunt text, tipul de variabilă va fi text. Sarcina este împărțită în două etape: prima este formarea primului fișier; al doilea citește primul fișier și generează al doilea, apoi afișează conținutul celui de-al doilea fișier pe ecran.

Primer program;

Var f1,f2:text;

I,n: întreg;

S: șir;

ÎNCEPE

(formează primul fișier)

Assign(f1, 'fişier1.txt'); (stabilim o conexiune între o variabilă de fișier și un fișier fizic de pe disc)

Rescrie(f1); (deschide fisierul pentru scriere)

Readln(n) (determinați numărul de linii care trebuie introduse)

pentru i:=1 la n do

ÎNCEPE

readln(e); (introduceți șiruri de caractere de la tastatură)

scrieln(f1,s); (noi scriem linii secvențiale în fișier)

Sfârşit;

close(f1); (terminăm de lucru cu primul fișier, acum există un fișier pe disc numit file1.txt care conține liniile pe care le-am introdus. Putem termina aici programul, putem continua să lucrăm cu fișierul în alt program, la altă dată, dar vom continua)

(partea a doua: citirea din primul fișier și formarea celui de-al doilea)

Resetare(f1); (deschide primul fișier pentru citire)

Assign(f2, 'fişier2.txt'); (stabilim o conexiune între a doua variabilă de fișier și fișierul fizic)

Rescrie(f2); (deschide al doilea fișier pentru scriere)

(În continuare, trebuie să citiți secvențial linii din primul fișier, să verificați dacă condiția este îndeplinită și să scrieți liniile necesare în al doilea fișier. Pentru a citi dintr-un fișier text, se recomandă utilizarea unei bucle în conformitate cu condiția „ până la sfârșitul fișierului”)

Deși nu eof(f1) face

ÎNCEPE

Readln(f1,s);(citește următoarea linie din primul fișier)

Dacă (s=’A’) sau (s=’a’), atunci

Writeln(f2,s); (scriem linii care satisfac condiția în al doilea fișier)

Sfârşit;

Închidere(f1,f2); (terminăm de lucru cu fișierele)

(partea a treia: afișați al doilea fișier)

Writeln;

Writeln('Al doilea fișier conține liniile:');

Resetare(f2); (deschideți al doilea fișier pentru citire)

Deși nu eof(f2) do (până la sfârșitul celui de-al doilea fișier)

ÎNCEPE

Readln(f2,s);(citește următoarea linie din al doilea fișier)

Scrierile; (afișează linia pe ecran)

Sfârşit;

Sfârşit.

Sarcina 1: Dat un fișier text. Numărați numărul de linii dintr-un fișier.

  1. Deschideți fișierul pentru citire;
  2. Organizați citirea datelor dintr-un fișier linie cu linie (readln(f,s), unde variabilă de tip sșir), numărarea valorii variabilei de contor k la fiecare pas de citire;
  3. Afișează valoarea variabilei contor;
  4. Închideți fișierul.

programul z1;

var k:întreg;

s:șir;

f:text;

ÎNCEPE

assign(f,"input.pas");

resetare(f);

k:=0;

în timp ce nu eof(f) începe

readln(f,s); k:=k+1;capăt;

writeln("k=",k);

aproape(f);

Sfârşit.

Sarcina 2: Dat un fișier text. Tipăriți toate liniile sale începând cu caracterul „T”.

Să creăm un algoritm pentru rezolvarea problemei (Creează un fișier de date text – input.pas înainte de a începe să rezolvi problema):

  1. Conectați fișierul logic f la fișierul fizic input.pas;
  2. Deschideți fișierul pentru citire;
  3. Organizați citirea datelor dintr-un fișier linie cu linie (readln(f,s), unde s este o variabilă de tip șir), verificând la fiecare pas dacă linia îndeplinește condiția: primul caracter este „T”, iar dacă da, afișați această linie pe ecran;
  4. Închideți fișierul.

programul z2;

var k:întreg;

s:șir;

f:text;

ÎNCEPE

assign(f,"input.pas");

resetare(f);

în timp ce nu eof(f) începe

readln(f,s);

dacă s=’T’ atunci scriețiln(e);

Sfârşit;

închide(f);

Sfârşit.

Sarcina 3: Dat un fișier text. Tipăriți toate rândurile sale care conțin mai mult de 30 de caractere.

Să creăm un algoritm pentru rezolvarea problemei (Creează un fișier de date text – input.pas înainte de a începe să rezolvi problema):

  1. Conectați fișierul logic f la fișierul fizic input.pas;
  2. Deschideți fișierul pentru citire;
  3. Organizați citirea datelor dintr-un fișier linie cu linie (readln(f,s), unde s este o variabilă de tip șir), verificând la fiecare pas dacă linia îndeplinește condiția: lungimea liniei este mai mare de 30 și, dacă da, afișați această linie de pe ecran;
  4. Închideți fișierul.

programul z3;

var k:întreg;

s:șir;

f:text;

ÎNCEPE

assign(f,"input.pas");

resetare(f);

în timp ce nu eof(f) începe

readln(f,s);

dacă lungime(le)>=30 atunci scrieți(e);

Sfârşit;

închide(f);

Sfârşit.

Sarcina 4: Dat un fișier text. Tipăriți toate liniile sale care conțin textul dat ca fragment.

Să creăm un algoritm pentru rezolvarea problemei (Creează un fișier de date text – input.pas înainte de a începe să rezolvi problema):

  1. Conectați fișierul logic f la fișierul fizic input.pas;
  2. Deschideți fișierul pentru citire;
  3. Setați un fragment de text pentru a căuta (s1);
  4. Organizați citirea datelor dintr-un fișier linie cu linie (readln(f,s), unde s este o variabilă de tip șir), verificând la fiecare pas dacă linia îndeplinește condiția: conține textul specificat (s1) ca fragment, și dacă da, scoateți această linie pe ecran;
  5. Închideți fișierul.

programul z4;

var k:întreg;

s1,s:șir;

f:text;

ÎNCEPE

writeln('intrafragmenttext’);

readln(s1);

assign(f,"input.pas");

resetare(f);

în timp ce nu eof(f) începe

readln(f,s);

dacă pos(s1,s)<>0 apoi scrieți(e);

Sfârşit;

închide(f);

Sfârşit.

Sarcina 5: Dat un fișier text. Imprimați linia 5 într-un fișier text nou, iar restul pe ecran.

Să creăm un algoritm pentru rezolvarea problemei (Creează un fișier de date text – input.pas înainte de a începe să rezolvi problema):

  1. Conectați fișierul logic f la fișierul fizic input.pas și fișierul logic g la fișierul fizic output.pas;
  2. Deschideți fișierul pentru citire;
  3. Organizați citirea datelor dintr-un fișier linie cu linie (readln(f,s), unde s este o variabilă de tip șir), numărând valoarea variabilei contorului k la fiecare pas de citire și verificând la fiecare pas dacă valoarea contorului este egal cu 5, iar dacă da, atunci scoateți această linie în fișierul g, altfel scoateți-o pe ecran;
  4. Închideți fișierul.

programul z5;

var k:întreg;

s:șir;

f,g:text;

ÎNCEPE

assign(f,"input.pas");

resetare(f);

assign(g,"output.pas");

rescrie(g);

k:=0;

în timp ce nu eof(f) începe

readln(f,s);k:=k+1;

dacă k=5 atunci scrieln(g,s);

Sfârşit;

aproape(f); aproape(f);