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

Z GeoWikiCZ
mBez shrnutí editace
 
(Není zobrazeno 45 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, 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>save</code>, <code>load</code>, <code>clear</code>, <code>whos</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/user/gin/git1/matlab/matlab.pdf#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
# 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 ( ke stažení [http://peso.fsv.cvut.cz/vyuka/git1/vstup.txt  vstup.txt] ) do matice


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


<source lang=octave>
<source lang=octave>
t = 'ahoj, svete!'
t = 'muj reteyec'
t(7)
length(t)
t(7:end)
t(5:end)
t(7:end-1)
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})
</source>
</source>


Řádek 26: Řádek 35:


<source lang=octave>
<source lang=octave>
class(t)
whos
A = [1 2; 3 4]
class(t)
class(A)
class(sat)
class(1)
A = [1 2; 3 4]
class(2.3)
class(A)
class(1)
class(2.3)
class('1')
</source>
</source>


=== Načtení dat z textového souboru ===
''(konverze mezi datovými typy)''


<source lang=octave>
<source lang=octave>
pwd
disp( ['vysledek je ',num2str(A(1))] )
f = fopen('vstup.txt')
 
x = fscanf(f,'%f ',[2,inf]);
p1 = 1
fclose(f)
p2 = '1'
p1 + p2
p1 + str2num(p2)
</source>
</source>


=== Export/import proměnných ===
<source lang=octave>
save mojedata sat
clear sat
sat
load mojedata
sat
</source>


=== Formátovaný zápis matice ===
=== Formátovaný zápis matice ===


* [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38 fopen()]
''(zápis do souboru)''
 
* funkce [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=41 fopen()] a její atributy


<source lang=octave>
<source lang=octave>
A = rand(3,4) * 10;
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
f = fopen('a.txt', 'w');
fid = fopen('a.txt','w');
fprintf(f, '%f %f %f %f\n', A);
fprintf(fid,'%f %f %f %f\n',A);
fclose(f); # 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.272319 6.032164 4.710683 3.489846
1.000000 5.000000 9.000000 2.000000  % ve výpisu matice je nesprávné pořadí prvků !!!
3.702292 9.547577 9.105915 4.923848
6.000000 10.000000 3.000000 7.000000
6.948680 8.851383 7.628851 6.733618
11.000000 4.000000 8.000000 12.000000
#
 
# změna dimenze matice při zápisu
% správný výpis matice (správný rozměr a pořadí prvků)
f = fopen('a1.txt', 'w');
fid = fopen('a.txt','w');
fprintf(f, '%f %f %f\n', A);
fprintf(fid,'%f %f %f %f\n',A');
fclose(f);
fclose(fid);
type a1.txt  
type a.txt  
5.272319 6.032164 4.710683
1.000000 2.000000 3.000000 4.000000
3.489846 3.702292 9.547577
5.000000 6.000000 7.000000 8.000000
9.105915 4.923848 6.948680
9.000000 10.000000 11.000000 12.000000
8.851383 7.628851 6.733618
 
#
% změna formátování
# změna formátování
fid = fopen('a.txt','w');
f = fopen('a2.txt', 'w');
fprintf(fid,'%5.1f %4.1f %4.1f %4.1f\n',A');
fprintf(f, '%.1f %.1f %.1f %.1f\n', A);
fclose(fid);
fclose(f);
type a.txt
type a2.txt
  1.0  2.3.0 4.0
5.3 6.0 4.7 3.5
  5.0  6.7.0  8.0
3.7 9.5 9.1 4.9
  9.0 10.0 11.0 12.0
6.9 8.9 7.6 6.7
 
#
% zápis dat do již existujícího souboru
# zápis dat do již existujícího souboru
fid = fopen('a.txt','a');
f = 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(f, '%f %f %f %f\n', A(1,:));
fclose(fid);
fclose(f);
type a.txt
type a.txt
  1.0  2.0  3.4.0
5.272319 6.032164 4.710683 3.489846
  5.0  6.0  7.0  8.0
3.702292 9.547577 9.105915 4.923848
  9.0 10.0 11.0 12.0
6.948680 8.851383 7.628851 6.733618
1.000000 2.000000 3.000000 4.000000
5.272319 3.489846 9.105915 8.851383
</source>
</source>


=== Formátování dat obecně ===
''(zápis na standardní výstup - příkazové okno)''
 
* viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#41 formátovací položky]


<source lang=octave>
<source lang=octave>
fprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
n = 8:10;  alfa = [45.246 -349.154 1.750];
moje nahodne cislo (1 az 100): 31
fprintf('pro bod %2i je uhel = %7.2f°\n',[n; alfa]);
#
# uložení do řetězce
r = sprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
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
 
</source>
</source>


=== Formátované čtení matice ===
''(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)''


<source lang=octave>
<source lang=octave>
A = magic(5)
disp(alfa)
f = fopen('m.txt', 'w');
disp('text')
# uložení jako sloupcový vektor
fprintf(f, '%f\n', A);
fclose(f);
type m.txt
# znovunačtení do dimenze [5x5]
f = fopen('m.txt', 'r');
B = fscanf(f, '%f', [5, inf])
#
# čtení z řetězce
s = sscanf('10.2 5.222', '%f %f')
#
# přeskakování položek
s = sscanf('10.2 5.222 4.2', '%f %*f %f')
fclose(f);
</source>
</source>


=== Změna polohy kurzoru v souboru ===
=== Formátování dat obecně ===
 
* viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=44 formátovací položky]


<source lang=octave>
<source lang=octave>
f = fopen('s.txt', 'w+')
tt = 'moje nahodne cislo'; n = 100;
fprintf(f, '%f\n', [1 2; 3 4])
fprintf('%s (1 az %i): %i\n',tt,n,randi(n));
fclose(f)
moje nahodne cislo (1 az 100): 31
type s.txt
 
1.000000
% uložení do řetězce
3.000000
r = sprintf('%s (1 az %i): %i\n',tt,n,randi(n))
2.000000
class(r)
4.000000
ans = char
#
 
f = fopen('s.txt')
% příklad formátování dvou řádkových vektorů
a = fscanf(f, '%f', [1, inf])
a = 1:10
b = fscanf(f, '%f', [2, inf])
fprintf('a: %.2d -> a^2: %.3d\n', [a; a.^2]);
fseek(f, 0, 'bof');
a: 01 -> a^2: 001
b = fscanf(f, '%f', [2, inf])
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
</source>
</source>


== Úlohy ==
== Úlohy ==


* http://peso.fsv.cvut.cz/vyuka/git1/3.html
* [[155GIT1 / 3. cvičení / Příklady|3. cvičení - příklady]]
 
<!-- -->
* http://peso.fsv.cvut.cz/vyuka/git1/4.html

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