155GIT1 / 3. cvičení
Matlab - Textové řetězce, workspace, zápis matic do textových souborů
Náplň
- textové řetězce
- datové typy •
class()
•num2str()
,str2num()
- workspace •
whos
•ls
•save
,load
,clear
- manipulace se soubory viz [1] •
type
- manipulace se soubory viz [1] •
- zápis matice do textového souboru / na standardní výstup
- formátování výstupu
Ukázky
Řetězce
t = 'muj reteyec'
length(t)
t(5:end)
index = find(t=='y')
t(index) = 'z'
t(end+1:end+2) = ' :'
t = ['toto je ',t]
sat = {'GPS','GLONASS','GALILEO'} % pole buněk (uložení řetězců různých délek do jedné proměnné)
% buňky mohou obsahovat jak numerické, tak textové proměnné
sat{1}
sat{1}(2)
length(sat)
length(sat{3})
Datové typy
whos
class(t)
class(sat)
A = [1 2; 3 4]
class(A)
class(1)
class(2.3)
class('1')
(konverze mezi datovými typy)
disp( ['vysledek je ',num2str(A(1))] )
p1 = 1
p2 = '1'
p1 + p2
p1 + str2num(p2)
Export/import proměnných
save mojedata sat
clear sat
sat
load mojedata
sat
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