155GIT1 / 3. cvičení: Porovnání verzí

Z GeoWikiCZ
Holesovsky (diskuse | příspěvky)
 
(Nejsou zobrazeny 3 mezilehlé verze od stejného uživatele.)
Řádek 1: Řádek 1:
{{Geoinformatika}}
{{Geoinformatika}}
{{Cvičení|155GIT1|3|Matlab - Textové řetězce, workspace, čtení a zápis matic z/do textových souborů}}
{{Cvičení|155GIT1|3|Matlab - Textové řetězce, workspace, zápis matic do textových souborů}}


== Náplň cvičení ==
== Náplň ==


# textové řetězce
# textové řetězce
# datové typy {{bullet}} <code>class()</code>
# datové typy {{bullet}} <code>class()</code> {{bullet}} <code>num2str()</code>, <code>str2num()</code>
# workspace {{bullet}} <code>whos</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code>
# workspace {{bullet}} <code>whos</code> {{bullet}} <code>ls</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code>
#* manipulace se soubory viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=38] {{bullet}} <code>delete</code>
#* manipulace se soubory viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=38] {{bullet}} <code>type</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://geo102.fsv.cvut.cz/vyuka/155GIT1/data/cv3data.txt cv3data.txt])


== Ukázky ==
== Ukázky ==
Řádek 17: Řádek 16:


<source lang=octave>
<source lang=octave>
  t = 'muj retezec'
  t = 'muj reteyec'
  length(t)
  length(t)
t(9) = 'z'
  t(5:end)
  t(5:end)
  t(end+1:end+2) = '!!'
index = find(t=='y')
t(index) = 'z'
  t(end+1:end+2) = ' :'
  t = ['toto je ',t]
  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})
</source>
</source>


Řádek 28: Řádek 35:


<source lang=octave>
<source lang=octave>
whos
  class(t)
  class(t)
class(sat)
  A = [1 2; 3 4]
  A = [1 2; 3 4]
  class(A)
  class(A)
Řádek 34: Řádek 43:
  class(2.3)
  class(2.3)
  class('1')
  class('1')
</source>
''(konverze mezi datovými typy)''
<source lang=octave>
disp( ['vysledek je ',num2str(A(1))] )
p1 = 1
p2 = '1'
p1 + p2
p1 + str2num(p2)
</source>
=== Export/import proměnných ===
<source lang=octave>
save mojedata sat
clear sat
sat
load mojedata
sat
</source>
</source>


Řádek 134: Řádek 164:
  a:  9 -> a^2:  81
  a:  9 -> a^2:  81
  a: 10 -> a^2: 100
  a: 10 -> a^2: 100
</source>
=== Formátované čtení dat ===
''(čtení z textového souboru)''
<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','%f %f')
</source>
=== Změna polohy kurzoru v souboru ===
<source lang=octave>
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;
</source>
</source>


Řádek 182: Řádek 169:


* [[155GIT1 / 3. cvičení / Příklady|3. cvičení - příklady]]
* [[155GIT1 / 3. cvičení / Příklady|3. cvičení - příklady]]
<!-- -->

Aktuální verze z 8. 3. 2023, 03:25

Matlab - Textové řetězce, workspace, zápis matic do textových souborů

Náplň

  1. textové řetězce
  2. datové typy • class()num2str(), str2num()
  3. workspace • whoslssave, load, clear
    • manipulace se soubory viz [1]type
  4. zápis matice do textového souboru / na standardní výstup
  5. 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)

 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

Úlohy