Szövegfájlok

§ 9. Szövegfájlok

A MatLab teljesen univerzális módon biztosítja az adatok olvasását a szöveges fájlokból, és az előírt formátumú adatok írása egy szöveges fájlba. Először meg kell fontolnunk a mátrixok és vektorok által képviselt számszerű adatok műveletét. Hagyja, hogy a számokat a vec.dat szöveges fájlban az oszlopban a MatLab szabályai szerint, azaz Egy tizedespontot használunk a tizedes helyek elválasztására, és az e számot exponenciális formában írjuk. A terhelés funkció lehetővé teszi, hogy a vec.dat fájl tartalmát egy numerikus tömbbe helyezze be. Az aposztrófokban található fájl neve meg van adva a bemeneti argumentumtartalomban, és a kimeneti argumentumban az oszlop-1 oszlop visszaadódik:

A fordított művelet - a vektor oszlop értékeinek írása egy fájlba - a mentési parancs segítségével történik, amelynek érvei: a fájlnév, a változó és az opcionális paraméter -ascii, ami szöveges formában ír:

»Mentse 'vec2.dat' v2 -ascii

Ha a szövegfájlban lévő számok sorban vannak, és szóközzel vannak elválasztva, akkor az olvasás eredménye vektoros karakterlánc lesz. Igaz és inverz, a vektorgrafikus értékek írása azt eredményezi, hogy egy szövegfájlba írt szöveget írnak.

A mátrix rögzítése a mentési paranccsal egy szöveges állomány létrehozásához vezet, amelynek számtáblája van. Egy szövegfájl, amelynek minden sorában egyenlő számok vannak egymástól elválasztva üresek, a funkcióterhelés kétdimenziós tömböt tartalmaz.

A load andsave parancsok csak a legegyszerűbb számjegyek I / O-jára szolgálnak. Nézzünk most egy bonyolultabb esetet, amikor az olvasandó vagy írott információk nemcsak számokat tartalmaznak, hanem szöveget is tartalmaznak. A szöveges fájlok feldolgozása három szakaszból áll:

adatok olvasása vagy írása;

Fájl megnyitásához használja a fopen függvényt, amelyet két bemeneti argumentummal hívunk meg: a fájl neve és a fájl elérési módját meghatározó karakterlánc. A kimeneti argumentum a fájlazonosító, azaz a fájlazonosító. változó, amelyet ezt követően a fájlhoz való hozzáféréshez használnak. A "nyitott" funkció visszatér a -1-hez, ha hiba történt a fájl megnyitásakor. A fájl megnyitásának négy fő módja van:

f = fopen ('myfile.dat', 'rt') - a myfile.dat szövegfájl megnyitása csak olvasható;

f = fopen ('myfile.dat', 'rt +') - nyissa meg a myfile.dat szövegfájlt az adatok olvasásához és írásához;

f = fopen ('myfile.dat', 'wt') - hozzon létre egy üres szövegfájlt a myfile.dat fájlhoz;

f = fopen ('myfile.dat', 'wt +') - hozzon létre egy üres szövegfájlt myfile.dat az adatok írásához és olvasásához.

Ha az utolsó két lehetőséget használja, óvatosnak kell lennie - ha a myfile.dat fájl már létezik, annak tartalmát megsemmisítik. A fájl megnyitása után lehetőség nyílik arra, hogy információt olvasson, vagy fájlba helyezze. Ha befejezte a munkát a fájllal, zárja be fclose-lel (f).

A szöveges fájlból származó információk soronkénti leolvasása a fgetl függvény használatával történik. A fgetl bemeneti argumentuma a fájl azonosítója, és a kimeneti vonal az aktuális vonal. A fgetl-hez tartozó minden hívás egy sor olvasását eredményezi, és a fájl aktuális pozícióját a következő sor elejére fordítja. A 9.1. Listán látható parancsok egymás után olvassák el a strf1, str2, str3 karakterláncváltozók első három sorát a myfile.dat fájlból.

Lista 9.1. Egy szöveges fájl első három sorának olvasása

Szekvenciális olvasással előbb-utóbb elérjük a fájl végét, míg a fgetl függvény mínusz 1-re változik. A legmegfelelőbb, ha megvizsgáljuk, hogy a fájl aktuális pozíciója az utolsó. Ebből a célból a forof nevű függvényt hívják, amelyet a fájlazonosítótól hívnak és visszaad egy, ha az aktuális pozíció az utolsó és a nulla, ellenkező esetben. Általában a szekvenciális leolvasásokat a while loop használatával szervezzük. A 9.2-es lista tartalmazza a fájl-függvény nézetfájlt, amely a fájl sorait olvassa és megjeleníti őket a parancsablakban.

Lista 9.2. Fájl függvény nézetfájl

A viewfile ("viewfile.m") meghívása a fájlfájl szövegét a parancsablakban jeleníti meg.

A vonalak szöveges fájlba vannak írva az fprintf függvény használatával, az első bemeneti argumentuma a fájl azonosítója, a második a hozzáadandó vonal. A \ n jel a vonal mozgatására szolgál. Ha hozzáadja a sor végét, a következő parancs fprintf fog megjelenni a fájlhoz egy új sorból, és ha \ n az elején, a jelenlegi printf parancs kiadja a szöveget az új sorból. Például a parancsok sorrendje (lásd a 9.3. Listát) két szövegsor megjelenését eredményezi a my.txt fájlban (lásd a 9.4.

Lista 9.3. Húrok küldése szövegfájlba

fprintf (f, 'és ez a szöveg egy új sorból);

Lista 9.4. A 9.3. Listán szereplő üzemeltetők munkájának eredménye

szöveg több szöveget

és ez a szöveg egy új sorral

Hasonló eredményt érhetünk el, ha \ n a második függvény fprintf sorának vége felé a fprintf harmadik függvény sorának elejére mozgatunk. Az fprintf argumentum nemcsak egy karakterlánc, hanem egy karakterlánc változó is lehet. Ebben az esetben egy új vonal kimenetének biztosításához a "\ n" karakterláncot kell összefűzni.

A szövegfájlhoz való kimenő szöveg karakterláncot és számokat is tartalmazhat. Gyakran előfordul, hogy bizonyos számú pozíciót kell kiosztani egy számhoz, és exponenciális formában, vagy lebegőponttal és a tizedespont után megadott számjegyekkel kell kiadni. Itt nem teheti meg a formázás kimenetét az fprintf-lel, amelyre a következő hivatkozás látható:

fprintf (fájlazonosító, "formátumok", változók listája)

A változók listájában lehetnek mind numerikus változók (vagy számok), mind pedig karakterláncváltozók (vagy karakterláncok). A második argumentum olyan különleges formájú sztring, amelyben minden elem a listából megjelenik. Minden formátum egy százalék jelzéssel kezdődik. A vonalak megjelenítéséhez a formátum s, és a számok kimenete - f (lebegőpont) vagy e (exponenciális). A s előtti szám a vonal kimenetéhez rendelt pozíciók számát jelöli. Ha numerikus változók értékeit kapja, akkor két számot választ el egymástól a f vagy az e előtt. Az első a változó teljes értékéhez rendelt pozíciók számát jelenti, a második a tizedespont után megjelenő karakterek száma. Így a lista egyes elemeihez egy bizonyos hosszúságú mezőt osztanak ki, amely az alapértelmezés szerint a jobb oldalon történik. A balra igazításához kövesse a százalékos jel után a mínusz jelet. Íme az opciók az fprintf és az eredmények lekérdezéséhez, a kimenet után üres helyeket (üres helyek) a ○ szimbólum jelez.

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

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

fprintf (f, '% 8s', 'szöveg') ○○○ szöveg

fprintf (f, '% - 8s', 'szöveg') szöveg ○○○

Abban az esetben, ha a fenntartott mező nem elegendő a kimeneti karakterlánchoz vagy számhoz, a MatLab automatikusan növeli az 1. mező hosszát például:

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

A számok és a szöveg egyidejű kimenetén a hiányzó mezők miatt megjelennek a terek, mind a számok, mind a vonalak számára. A következő operátorok és végrehajtásuk eredményei megmutatják a mezők helyét a szövegfájl sorában. A hullámos vonal aláhúzza a számokhoz hozzárendelt mezőket, és a sorok alatt lévő egyenes vonalat, a szimbólum ○ még mindig szóközöket jelent.

A formázott kimenet akkor hasznos, ha egy fájlt hoz létre egy eredménytáblával. Tegyük fel, hogy a f.dat fájlba írjuk be a függvény értékét

Szövegfájlok
egy adott számú értékre
Szövegfájlok
, egymástól ugyanolyan távolságra vannak egymástól. Az értéktáblával ellátott fájlnak a következő struktúrát kell tartalmaznia, amint azt a 9.5.

Lista 9.5. Egy szövegfájl egy függvényérték táblával

Nyilvánvaló, hogy egy ciklust az argumentum kezdeti értékétől a végsőig egy adott pontszámnak megfelelő lépéshez kell hozzárendelni, és a freadf hurokhívásban belül a megfelelő kimeneti listával és formátumokkal. A sortörés \ n karaktere a vonal végén található a formátumokkal (lásd a 9.6. Listát).

Lista 9.6. A fájlfunkció fül, amely a funkcióértékek táblázata

Most pedig olvassuk el az adatokat egy szövegfájlból. Az fscanf függvény az fprintf fordítottja. Minden egyes fscanf hívás az aktuális pozícióból induló adatokat a változóba írja be. A változó típusát a megadott formátum határozza meg. Általában az fscanf hívása a következőképpen alakul:

a = fscanf (fájlazonosító, "formátum", olvasandó elemek száma)

A sorok olvasásához használja a% s formátumot, az egész számokhoz -., És a valós% g értéket.

Tegyük fel, hogy a exper.dat fájl tartalmazza a 9.7. Az adatokat szétválogatja egymástól. Meg kell vizsgálni a kísérlet dátumát (szám, hónap és év) a megfelelő változókban, és a numerikus tömbökben TIME és DAT-ban beírandó eredményeket.

9.7. Adatfájl exper.dat

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

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

9.8. Az fscanf használata az adatok olvasásához

A szöveges fájlban lévő információ táblázatos formában jeleníthető meg. Az ilyen információk elolvasásához olyan tömböket kell használni, amelyek megfelelő mezőkből állnak. Az összes információ olvasása az "while" ciklusban történik, amelynek állapotában a fájl végét a forof funkció segítségével ellenőrizzük.

Az fscanf funkció lehetővé teszi számok olvasását egy szövegfájllal, nem csak oszlopvektorral, hanem meghatározott méretű tömbökkel is. Nem számít a számok sorrendbe állítása a fájlban. A létrehozott tömb méretét a fscanf harmadik bemeneti argumentum vektorában adjuk meg. Fontolja meg a numerikus adatok olvasását a matr.txt fájlból (lásd a 9.9.

9.9. Matr.txt szöveges fájl mátrixszal

A függvény fscanfform a mátrix oszlopát, a fájlok sorszámát sorban egymás után olvasva (azaz soronként). Ezért három sorból és négy oszlopból álló mátrix kitöltéséhez a fájlból származó adatokat egy négyből háromra kell átolvasni, majd át kell ültetni (lásd a 9.10.

Lista 9.10. A mátrix olvasása szövegfájlból

Vegyük észre, hogy a tömb nemcsak 3-tól 4-ig terjedhet. Mivel az adatokat egy sorban olvassuk el, azokat a 2-es tömbre 6-ra, 4-re 3-ra stb.

A független munka elvégzése

Írj egy fájlfüggvényt, hogy adatokat olvashasson le egy fájlból egy olyan struktúrába vagy egy tömbhöz, amelyhez illő mezők találhatók.

1. Alekseev Sergey 1980 5 4 4 5 3 5 kutatás - cikk

Ivanov Konstantin 1981 3 4 3 4 3 5

Petrov Oleg 1980 5 5 5 4 4 5

3. 195251 St. Petersburg Polytechnical University

195256 SPb Science 49

195256 SPb Sciences 24

4. A megfigyelések eredményei

Idő = 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. Alekszejev Ivan 121-22-04

Sidorov Nikolay 101-21-99

Timofeev Sergey 570-00-03

A független munka elvégzése

Olvassa el a mátrixokat és vektorokat a fájlból megfelelő méretű tömbökbe. Vegye figyelembe, hogy a fájlok egymás mellett két vagy három mátrixot vagy vektort tartalmaznak, ezeket külön tömbökbe kell helyezni.

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,7 0,8 300

1Az adatfájlnak az aktuális MatLab könyvtárban kell lennie, ellenkező esetben meg kell adnia a teljes fájlnevet.

Jobb elkerülni az ilyen helyzeteket és előre kiszámítani a kimeneti mező hosszát, különben például a fájl adatszerkezete megszakadhat a táblázat kimenetében.

1 Ne feledje, hogy a szavakat szövegváltozóba írjuk be, köztük nincs szóköz. Ahhoz, hogy egy sztringet sztringekkel szétválasszon, szét kell választanod őket különféle karakterláncváltozókká és egyesítened őket.

Kapcsolódó cikkek