155GIT1 / 3. cvičení: Porovnání verzí
m (→Řetězce) |
|||
(Není zobrazeno 24 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
{{Geoinformatika}} | {{Geoinformatika}} | ||
{{Cvičení|155GIT1|3|Textové řetězce, workspace, čtení a zápis matic z/do textových souborů}} | {{Cvičení|155GIT1|3|Matlab - Textové řetězce, workspace, čtení a zápis matic z/do textových souborů}} | ||
== Náplň cvičení == | == Náplň cvičení == | ||
Řádek 7: | Řádek 7: | ||
# datové typy {{bullet}} <code>class()</code> | # datové typy {{bullet}} <code>class()</code> | ||
# workspace {{bullet}} <code>whos</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code> | # workspace {{bullet}} <code>whos</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code> | ||
#* manipulace se soubory viz [http://geo.fsv.cvut.cz/ | #* manipulace se soubory viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=38] {{bullet}} <code>delete</code> | ||
# zápis matice do textového souboru / na standardní výstup | # zápis matice do textového souboru / na standardní výstup | ||
# formátování výstupu | # formátování výstupu | ||
# čtení dat z textového souboru do matice (ke stažení [http:// | # čtení dat z textového souboru do matice (ke stažení [http://geo102.fsv.cvut.cz/vyuka/155GIT1/data/cv3data.txt cv3data.txt]) | ||
== Ukázky == | == Ukázky == | ||
Řádek 17: | Řádek 17: | ||
<source lang=octave> | <source lang=octave> | ||
t = ' | t = 'muj retezec' | ||
t( | length(t) | ||
t( | t(9) = 'z' | ||
t( | t(5:end) | ||
t(end+1:end+2) = '!!' | |||
t = ['toto je ',t] | |||
</source> | </source> | ||
Řádek 31: | Řádek 33: | ||
class(1) | class(1) | ||
class(2.3) | class(2.3) | ||
class('1') | |||
</source> | </source> | ||
Řádek 37: | Řádek 40: | ||
''(zápis do souboru)'' | ''(zápis do souboru)'' | ||
* funkce [http://geo.fsv.cvut.cz/ | * funkce [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=41 fopen()] a její atributy | ||
<source lang=octave> | <source lang=octave> | ||
A = | A = [1 2 3 4; 5 6 7 8; 9 10 11 12] | ||
fid = fopen('a.txt','w'); | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%f %f %f %f\n',A); | fprintf(fid,'%f %f %f %f\n',A); | ||
fclose(fid); % zápis je proveden až při uzavření souboru | fclose(fid); % zápis je proveden až při uzavření souboru | ||
type a.txt | type a.txt | ||
5. | 1.000000 5.000000 9.000000 2.000000 % ve výpisu matice je nesprávné pořadí prvků !!! | ||
6.000000 10.000000 3.000000 7.000000 | |||
11.000000 4.000000 8.000000 12.000000 | |||
% správný výpis matice (správný rozměr a pořadí prvků) | % správný výpis matice (správný rozměr a pořadí prvků) | ||
fid = fopen(' | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%f %f %f %f\n',A'); | fprintf(fid,'%f %f %f %f\n',A'); | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.000000 2.000000 3.000000 4.000000 | |||
5.000000 6.000000 7.000000 8.000000 | |||
9.000000 10.000000 11.000000 12.000000 | |||
5. | |||
% změna formátování | % změna formátování | ||
fid = fopen(' | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%.1f %.1f %.1f %.1f\n',A'); | fprintf(fid,'%5.1f %4.1f %4.1f %4.1f\n',A'); | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.0 2.0 3.0 4.0 | |||
5.0 6.0 7.0 8.0 | |||
9.0 10.0 11.0 12.0 | |||
% zápis dat do již existujícího souboru | % zápis dat do již existujícího souboru | ||
fid = fopen(' | fid = fopen('a.txt','a'); | ||
fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor | fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.0 2.0 3.0 4.0 | |||
5.0 6.0 7.0 8.0 | |||
9.0 10.0 11.0 12.0 | |||
1.000000 2.000000 3.000000 4.000000 | |||
</source> | </source> | ||
Řádek 92: | Řádek 85: | ||
<source lang=octave> | <source lang=octave> | ||
n = 8:10; alfa = [45.246 -349.154 1.750]; | n = 8:10; alfa = [45.246 -349.154 1.750]; | ||
fprintf('pro bod % | fprintf('pro bod %2i je uhel = %7.2f°\n',[n; alfa]); | ||
</source> | |||
''(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)'' | |||
<source lang=octave> | |||
disp(alfa) | |||
disp('text') | |||
</source> | </source> | ||
=== Formátování dat obecně === | === Formátování dat obecně === | ||
* viz [http://geo.fsv.cvut.cz/ | * viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=44 formátovací položky] | ||
<source lang=octave> | <source lang=octave> | ||
Řádek 136: | Řádek 136: | ||
</source> | </source> | ||
=== Formátované čtení | === Formátované čtení dat === | ||
''(čtení z textového souboru)'' | |||
<source lang=octave> | <source lang=octave> | ||
fid = fopen('cv3data.txt','r'); | |||
bxy = fscanf(fid,'%f',[3,inf]); | |||
bxy = bxy'; % pro shodné rozměry matice jako v datovém souboru | |||
fclose(fid); | |||
% přeskakování položek | |||
xy = fscanf(fid,'%*f %f %f',[2,inf]); | |||
xy = xy'; | |||
</source> | |||
''(čtení z řetězce)'' | |||
<source lang=octave> | |||
s = sscanf('10.2 5.222 | s = sscanf('10.2 5.222','%f %f') | ||
</source> | </source> | ||
Řádek 155: | Řádek 160: | ||
<source lang=octave> | <source lang=octave> | ||
fid = fopen('s.txt','w | fid = fopen('s.txt','w'); | ||
fprintf(fid,'%f\n',[1 2; 3 4]); | fprintf(fid,'%f\n',[1 2; 3 4]'); | ||
fclose(fid); | fclose(fid); | ||
type s.txt | type s.txt | ||
1.000000 | 1.000000 | ||
2.000000 | |||
3.000000 | 3.000000 | ||
4.000000 | 4.000000 | ||
fid = fopen('s.txt'); | fid = fopen('s.txt','r'); | ||
a = fscanf(fid,'%f',[1, inf]) | a = fscanf(fid,'%f',[1, inf]) | ||
b = fscanf(fid,'%f',[2, inf]) % kurzor je již na konci datového souboru s.txt | b = fscanf(fid,'%f',[2, inf]) % kurzor je již na konci datového souboru s.txt | ||
fseek(fid,0,'bof'); % totožně fseek(fid,0,-1); | fseek(fid,0,'bof'); % totožně fseek(fid,0,-1); anebo frewind(fid); | ||
b = fscanf(fid,'%f',[2, inf]) | b = fscanf(fid,'%f',[2, inf]) | ||
fseek(fid,2,'bof'); | |||
c = fscanf(fid,'%f',[2, inf]) | |||
fclose all; | fclose all; | ||
</source> | </source> | ||
Řádek 174: | Řádek 181: | ||
== Úlohy == | == Úlohy == | ||
* | * [[155GIT1 / 3. cvičení / Příklady|3. cvičení - příklady]] | ||
Verze z 24. 2. 2021, 08:44
Matlab - Textové řetězce, workspace, čtení a zápis matic z/do textových souborů
Náplň cvičení
- textové řetězce
- datové typy •
class()
- workspace •
whos
•save
,load
,clear
- manipulace se soubory viz [1] •
delete
- manipulace se soubory viz [1] •
- zápis matice do textového souboru / na standardní výstup
- formátování výstupu
- čtení dat z textového souboru do matice (ke stažení cv3data.txt)
Ukázky
Řetězce
t = 'muj retezec'
length(t)
t(9) = 'z'
t(5:end)
t(end+1:end+2) = '!!'
t = ['toto je ',t]
Datové typy
class(t)
A = [1 2; 3 4]
class(A)
class(1)
class(2.3)
class('1')
Formátovaný zápis matice
(zápis do souboru)
- funkce fopen() a její atributy
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
fid = fopen('a.txt','w');
fprintf(fid,'%f %f %f %f\n',A);
fclose(fid); % zápis je proveden až při uzavření souboru
type a.txt
1.000000 5.000000 9.000000 2.000000 % ve výpisu matice je nesprávné pořadí prvků !!!
6.000000 10.000000 3.000000 7.000000
11.000000 4.000000 8.000000 12.000000
% správný výpis matice (správný rozměr a pořadí prvků)
fid = fopen('a.txt','w');
fprintf(fid,'%f %f %f %f\n',A');
fclose(fid);
type a.txt
1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000
9.000000 10.000000 11.000000 12.000000
% změna formátování
fid = fopen('a.txt','w');
fprintf(fid,'%5.1f %4.1f %4.1f %4.1f\n',A');
fclose(fid);
type a.txt
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
% zápis dat do již existujícího souboru
fid = fopen('a.txt','a');
fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor
fclose(fid);
type a.txt
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
1.000000 2.000000 3.000000 4.000000
(zápis na standardní výstup - příkazové okno)
n = 8:10; alfa = [45.246 -349.154 1.750];
fprintf('pro bod %2i je uhel = %7.2f°\n',[n; alfa]);
(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)
disp(alfa)
disp('text')
Formátování dat obecně
tt = 'moje nahodne cislo'; n = 100;
fprintf('%s (1 az %i): %i\n',tt,n,randi(n));
moje nahodne cislo (1 az 100): 31
% uložení do řetězce
r = sprintf('%s (1 az %i): %i\n',tt,n,randi(n))
class(r)
ans = char
% příklad formátování dvou řádkových vektorů
a = 1:10
fprintf('a: %.2d -> a^2: %.3d\n', [a; a.^2]);
a: 01 -> a^2: 001
a: 02 -> a^2: 004
a: 03 -> a^2: 009
a: 04 -> a^2: 016
a: 05 -> a^2: 025
a: 06 -> a^2: 036
a: 07 -> a^2: 049
a: 08 -> a^2: 064
a: 09 -> a^2: 081
a: 10 -> a^2: 100
fprintf('a: %2d -> a^2: %3d\n', [a; a.^2]);
a: 1 -> a^2: 1
a: 2 -> a^2: 4
a: 3 -> a^2: 9
a: 4 -> a^2: 16
a: 5 -> a^2: 25
a: 6 -> a^2: 36
a: 7 -> a^2: 49
a: 8 -> a^2: 64
a: 9 -> a^2: 81
a: 10 -> a^2: 100
Formátované čtení dat
(čtení z textového souboru)
fid = fopen('cv3data.txt','r');
bxy = fscanf(fid,'%f',[3,inf]);
bxy = bxy'; % pro shodné rozměry matice jako v datovém souboru
fclose(fid);
% přeskakování položek
xy = fscanf(fid,'%*f %f %f',[2,inf]);
xy = xy';
(čtení z řetězce)
s = sscanf('10.2 5.222','%f %f')
Změna polohy kurzoru v souboru
fid = fopen('s.txt','w');
fprintf(fid,'%f\n',[1 2; 3 4]');
fclose(fid);
type s.txt
1.000000
2.000000
3.000000
4.000000
fid = fopen('s.txt','r');
a = fscanf(fid,'%f',[1, inf])
b = fscanf(fid,'%f',[2, inf]) % kurzor je již na konci datového souboru s.txt
fseek(fid,0,'bof'); % totožně fseek(fid,0,-1); anebo frewind(fid);
b = fscanf(fid,'%f',[2, inf])
fseek(fid,2,'bof');
c = fscanf(fid,'%f',[2, inf])
fclose all;