155GIT1 / 3. cvičení: Porovnání verzí
m Zrušena verze 34961 od uživatele Holesovsky (diskuse) |
mBez shrnutí editace |
||
Řá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/user/gin/git1 | #* manipulace se soubory viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab.pdf#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 | ||
Řádek 40: | Řádek 40: | ||
''(zápis do souboru)'' | ''(zápis do souboru)'' | ||
* funkce [http://geo.fsv.cvut.cz/user/gin/git1 | * funkce [http://geo.fsv.cvut.cz/user/gin/git1/matlab.pdf#41 fopen()] a její atributy | ||
<source lang=octave> | <source lang=octave> | ||
Řádek 97: | Řádek 97: | ||
=== Formátování dat obecně === | === Formátování dat obecně === | ||
* viz [http://geo.fsv.cvut.cz/user/gin/git1 | * viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab.pdf#44 formátovací položky] | ||
<source lang=octave> | <source lang=octave> |
Verze z 5. 3. 2019, 21:33
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 reteyec'
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;