Fișiere text

§ 9. Fișiere text

MatLab oferă modalități destul de universale de citire a datelor din fișierele text și de scriere a datelor într-un fișier text. Să considerăm mai întâi operația cu date numerice reprezentate de matrice și vectori. Lăsați numerele din fișierul text vec.dat în coloană în conformitate cu regulile MatLab, adică Un punct zecimal este folosit pentru a separa zecimalele și e este folosit pentru a scrie numărul în formă exponențială. Funcția de încărcare vă permite să inserați conținutul fișierului vec.dat într-o matrice numerică. Numele fișierului închis în apostrofuri este specificat în argumentloadload, iar în argumentul de ieșire este returnată coloana coloană 1:







Operația inversă - scrierea valorilor unei coloane vectoriale într-un fișier - se realizează utilizând comanda de salvare, ale cărei argumente sunt: ​​numele fișierului, variabila și parametrul opțional -ascii, ceea ce înseamnă scrierea în formă text:

»Salvați 'vec2.dat' v2 -ascii

Dacă numerele din fișierul text sunt într-o linie și separate prin spații, rezultatul citirii va fi un șir vectorial. Adevărat și invers, scrierea valorilor unui șir de vectori va determina scrierea acestora într-un șir într-un fișier text.

Înregistrarea matricei cu comanda de salvare duce la formarea unui fișier text cu o tabelă de numere. Un fișier text, fiecare linie din care conține același număr de numere separate prin spații, este citit într-o matrice bidimensională prin încărcarea funcției.

Comenzile de încărcare și salvare sunt destinate numai celor mai simple intrări / ieșiri de date numerice. Să analizăm acum un caz mai complicat, când informațiile care trebuie citite sau scrise conțin nu numai numere, ci și text. Lucrul cu fișierele text are trei etape:

citirea sau scrierea datelor;

Pentru a deschide un fișier, utilizați funcția fopen, care se numește cu două argumente de intrare: numele fișierului și șirul care specifică modul de accesare a fișierului. Argumentul de ieșire este identificatorul de fișier, adică variabilă, care este apoi utilizată pentru orice acces la fișier. Funcția "deschis" returnează -1 în cazul în care a apărut o eroare la deschiderea fișierului. Există patru modalități principale de a deschide un fișier:

f = fopen ('myfile.dat', 'rt') - deschiderea fișierului text myfile.dat numai pentru citirea de pe el;

f = fopen ('myfile.dat', 'rt +') - deschideți fișierul text myfile.dat pentru citirea și scrierea datelor;

f = fopen ('myfile.dat', 'wt') - creați un fișier text gol myfile.dat pentru scrierea de date;

f = fopen ('myfile.dat', 'wt +') - creați un fișier text gol myfile.dat pentru scrierea și citirea datelor.

Când utilizați ultimele două opțiuni, ar trebui să fiți atenți - dacă fișierul myfile.dat există deja, conținutul acestuia va fi distrus. După deschiderea fișierului, devine posibil să se citească informații din el sau să se pună într-un fișier. Când terminați lucrul cu fișierul, trebuie să îl închideți cu fclose (f).

O citire liniară a informațiilor dintr-un fișier text se efectuează utilizând funcția fgetl. Argumentul de intrare pentru fgetl este identificatorul de fișier, iar linia de ieșire este linia curentă. Fiecare apel la fgetl duce la citirea unei linii și traducerea poziției curente în fișier la începutul liniei următoare. Comenzile afișate în listare 9.1 citesc secvențial primele trei linii ale variabilelor șir str1, str2, str3 din fișierul myfile.dat.

Listing 9.1. Citirea primelor trei linii ale unui fișier text

Cu citirea secvențială, mai devreme sau mai târziu se va ajunge la sfârșitul fișierului, în timp ce funcția fgetl se va micula 1. Este cel mai bine să verificați înainte de a citi dacă poziția curentă din fișier este ultima. În acest scop, se numește funcția forof, care este apelată de la identificatorul de fișier și returnează una dacă poziția curentă este ultima și zero, altfel. De obicei, citirile secvențiale sunt organizate folosind bucla în timp. Fișierul 9.2 conține fișierul de vizualizare a funcțiilor de fișier, care citește liniile fișierului și le afișează în fereastra de comandă.

Listarea 9.2. Fișier de vizualizare funcții fișier

Apelarea fișierului de vizualizare ("viewfile.m") face ca textul funcției fișierului să fie afișat în fereastra de comandă.

Liniile sunt scrise într-un fișier text utilizând funcția fprintf, primul său argument de intrare este identificatorul de fișier, iar al doilea este linia de adăugat. Semnul \ n este utilizat pentru a muta o linie. Dacă ați pus-o la sfârșitul liniei care urmează să fie adăugată, următoarea comandă fprintf va ieși în fișier dintr-o linie nouă și dacă \ n este la început, comanda curentă printf va scoate textul din noua linie. De exemplu, secvența de comenzi (vezi Listing 9.3) va avea ca rezultat apariția a două rânduri de text în fișierul meu.txt (vezi Listing 9.4).

Listing 9.3. Efectuarea șirurilor într-un fișier text

fprintf (f, 'și acest text dintr-o linie nouă');

Listing 9.4. Rezultatul activității operatorilor din Lista 9.3

mai mult text

și acest text cu o nouă linie

Un rezultat similar poate fi obținut prin mutarea \ n de la capătul liniei celei de-a doua funcții fprintf la începutul liniei a treia funcție fprintf. Argumentul fprintf poate fi nu numai un șir, ci și o variabilă de șir. În acest caz, pentru a asigura ieșirea dintr-o linie nouă, aceasta ar trebui să fie concatenată cu șirul "\ n".







Un șir pentru ieșirea într-un fișier text poate conține atât text cât și numere. De multe ori este necesar să se selecteze un anumit număr de poziții pentru un număr și să se afișeze în formă exponențială sau cu un punct de plutire și cu un număr dat de cifre după punctul zecimal. Aici nu puteți face fără formatarea ieșirii cu fprintf, referința la care arată:

fprintf (identificator de fișier, "formate", listă de variabile)

În lista variabilelor pot exista variabile numerice (sau numere) și variabile de șir (sau șiruri de caractere). Al doilea argument este un șir de tip special cu formate în care vor fi afișate toate elementele din listă. Fiecare format începe cu un semn procentual. Pentru ieșirea liniilor, formatul este s, iar pentru ieșirea de numere - f (punct de flotare) sau e (exponențial). Numărul anterior s indică numărul de poziții alocate pentru ieșirea liniei. Când obțineți valorile variabilelor numerice, aveți două numere separate printr-o perioadă înaintea f sau e. Primul înseamnă numărul de poziții alocate pentru întreaga valoare a variabilei, iar al doilea este numărul de caractere după punctul zecimal. Astfel, pentru fiecare dintre elementele listei este alocat un câmp de o anumită lungime, alinierea în care implicit este făcută pe partea dreaptă. Pentru a alinia spre stânga, urmați semnul minus după semnul procentului. Iată opțiunile de a apela fprintf și rezultatele, pozițiile goale după ieșire (semnele) sunt indicate de simbolul ○.

fprintf (f, '% 14.4e', exp (-5)) ○○○ 6.7379e-003

fprintf (f, '% - 14.4e', exp (-5)) 6.7379e-003 ○○○○

fprintf (f, '% 8s', 'text') ○○○ text

fprintf (f, '% - 8s', 'text') text ○○○

În cazul în care câmpul rezervat nu este suficient pentru șirul sau numărul de ieșire, MatLab mărește automat lungimea câmpului 1. de exemplu:

fprintf (f, '% 5,4e', exp (-5)) 6,7379e-003

Odată cu ieșirea simultană a numerelor și textului, spațiile pot apărea din cauza câmpurilor incomplete, alocate atât pentru numere, cât și pentru linii. Următorii operatori și rezultatul execuției acestora demonstrează locația câmpurilor în linia fișierului text. Linia ondulată subliniază câmpurile alocate numerelor, iar linia dreaptă sub linii, simbolul ○ încă înseamnă spații.

O ieșire formatată este utilă atunci când creați un fișier cu un tabel de rezultate. Să presupunem că este necesar să scrieți în fișierul f.dat tabelul valorilor funcției

Fișiere text
pentru o valoare numerică dată
Fișiere text
, distanțate unul față de celălalt la aceeași distanță. Fișierul cu tabelul de valori trebuie să aibă următoarea structură, după cum se arată în Lista 9.5.

Listing 9.5. Un fișier text cu tabel cu valori de funcții

Evident, ar trebui să organizăm un ciclu de la valoarea inițială a argumentului la cel final, cu un pas corespunzător unui anumit număr de puncte și în interiorul buclă de apel fprintf cu lista de ieșire corespunzătoare și formate. Caracterul \ n pentru ruperea liniei este plasat la sfârșitul liniei cu formatele (vezi Listing 9.6).

Listing 9.6. O fila de funcții de fișier care emite o tabelă cu valori ale funcțiilor

Să trecem acum la citirea datelor dintr-un fișier text. Funcția fscanf face inversul fprintf. Fiecare apel la fscanf determină introducerea datelor din poziția curentă în variabila. Tipul variabilei este determinat de formatul specificat. În general, apelul la fscanf are forma:

a = fscanf (identificator de fișier, 'format', număr de elemente care trebuie citite)

Pentru a citi liniile, utilizați formatul% s, pentru întregi -., Și pentru real -% g.

Să presupunem că fișierul exper.dat conține textul afișat în Lista 9.7. Datele sunt separate unul de altul prin spații. Este necesar să se ia în considerare data experimentului (număr, lună și an) în variabilele corespunzătoare, iar rezultatele să fie introduse în matricele numerice TIME și DAT.

Listarea 9.7. Fișier de date exper.dat

t = 0,1 0,2 0,3 0,4 0,5

G = 3,02 3,05 2,99 2,84 3,11

Listing 9.8. Folosind fscanf pentru a citi datele

Informațiile dintr-un fișier text pot fi prezentate sub forma unui tabel. Pentru a citi astfel de informații, ar trebui să utilizați o serie de structuri cu un set adecvat de câmpuri. Citirea tuturor informațiilor se realizează în buclă în timp, în situația în care se verifică sfârșitul fișierului cu ajutorul funcției forof.

Funcția fscanf oferă posibilitatea de a citi numere dintr-un fișier text, nu numai într-un vector de coloană, ci și dintr-un șir de dimensiuni specificate. Aranjarea numerelor pe liniile din dosar nu contează. Dimensiunile matricei care se formează sunt specificate în vectorul din al treilea argument de intrare fscanf. Luați în considerare citirea datelor numerice din matr.txt (consultați listele 9.9).

Listing 9.9. Matr.txt fișier text cu matrice

Funcția fscanformează coloana matricei, citirea secvențială a numerelor din fișier (adică, linie pe linie). De aceea, pentru a umple o matrice cu trei rânduri și patru coloane, trebuie să citiți datele dintr-un fișier într-un tablou de patru câte trei și apoi să le transpuneți (vezi Listing 9.10).

Listing 9.10. Citirea matricei dintr-un fișier text

Rețineți că matrice poate avea dimensiuni nu numai 3 la 4. Deoarece datele sunt citite succesiv, ele pot fi înregistrate într-o serie de 2 la 6, 4 și 3, și așa mai departe. D.

Sarcini pentru munca independentă

Scrieți o funcție de fișier pentru a citi datele dintr-un fișier într-o structură sau într-o serie de structuri cu câmpuri de potrivire.

1. Alekseev Sergey 1980 5 4 4 5 3 5 cercetare - articol

Ivanov Konstantin 1981 3 4 3 4 3 5

Petrov Oleg 1980 5 5 5 4 4 5

3. 195251 Universitatea Politehnică din St. Petersburg

195256 SPb Știință 49

195256 SPb Științe 24

4. Rezultatele observațiilor

Timp = 0,0 0,1 0,2 0,3 0,4 0,5 0,6

2.1 2.3 2.3 1.9 1.8 2.4

0,8 0,7 0,5 1,1 3,2 0,3

5. Alekseev Ivan 121-22-04

Sidorov Nikolay 101-21-99

Timofeev Sergey 570-00-03

Sarcini pentru munca independentă

Citiți matricile și vectorii din fișier în tablouri de dimensiuni corespunzătoare. Rețineți că fișierele conțin două sau trei matrici sau vectori una lângă cealaltă, ar trebui să fie plasate în mai multe rețele.

2. 1.399 2.001 9.921 3.21 0.12

0,129 1,865 8,341 9,33 8,01

9.136 8.401 7.133 3.12 3.22

3. 1 2 3 4 99 80

4. 10 20 40 50 12 19 21 32 44

6 7 8 9 0,1 0,2 0,3 0,4 200

0,5 0,6 0,8 0,8 300

1 Fișierul de date trebuie să fie în directorul curent MatLab, altfel trebuie să specificați numele întregului fișier.

1Luchshe evita o astfel de situație, în lungime de avans și de ieșire câmp de calcul, sau, de exemplu, derivarea mesei poate perturba structura datelor din fișier.

1 Rețineți că cuvintele sunt introduse într-o variabilă de șir fără un spațiu între ele. Pentru a obține un șir cu cuvinte separate de un spațiu, trebuie să le citiți separat în diferite variabile de șir și să le îmbinați.







Articole similare

Trimiteți-le prietenilor: