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

Z GeoWikiCZ
mBez shrnutí editace
(Není zobrazeno 36 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 6: Řádek 6:
# textové řetězce
# textové řetězce
# datové typy {{bullet}} <code>class()</code>
# datové typy {{bullet}} <code>class()</code>
# workspace {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code>, <code>whos</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/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>delete</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 do matice (ke stažení [http://peso.fsv.cvut.cz/vyuka/git1/vstup.txt vstup.txt])
# č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 = 'ahoj, svete!'
  t = 'muj retezec'
  t(7)
length(t)
  t(7:end)
  t(9) = 'z'
  t(7:end-1)
  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>


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


* funkce [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#41 fopen()] a její atributy
''(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 = 10 * rand(3,4);
  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.272319 3.702292 6.948680 6.032164    % ve výpisu matice nesprávné pořadí prvků
  1.000000 5.000000 9.000000 2.000000  % ve výpisu matice je nesprávné pořadí prvků !!!
  9.547577 8.851383 4.710683 9.105915
  6.000000 10.000000 3.000000 7.000000
  7.628851 3.489846 4.923848 6.733618
  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('a1.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);
  fclose(fid);
  type a1.txt  
  type a.txt  
  5.272319 6.032164 4.710683 3.489846
  1.000000 2.000000 3.000000 4.000000
3.702292 9.547577 9.105915 4.923848
  5.000000 6.000000 7.000000 8.000000
6.948680 8.851383 7.628851 6.733618
  9.000000 10.000000 11.000000 12.000000
 
% změna dimenze matice při zápisu
fid = fopen('a2.txt','w');
fprintf(fid,'%f %f %f\n',A');
fclose(fid);
type a2.txt
  5.272319 6.032164 4.710683    % nejde o transpozici !!!
3.489846 3.702292 9.547577
  9.105915 4.923848 6.948680
8.851383 7.628851 6.733618


  % změna formátování
  % změna formátování
  fid = fopen('a3.txt','w');
  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 a3.txt
  type a.txt
  5.3 6.0 4.7 3.5
  1.0 2.3.0 4.0
  3.7 9.5 9.1 4.9
  5.0 6.7.0  8.0
6.9 8.9 7.6 6.7
  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('a1.txt','a');
  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 a1.txt
  type a.txt
  5.272319 6.032164 4.710683 3.489846
  1.0  2.0 3.0  4.0
3.702292 9.547577 9.105915 4.923848
  5.6.0  7.0  8.0
  6.948680 8.851383 7.628851 6.733618
  9.0 10.0 11.0 12.0
  5.272319 6.032164 4.710683 3.489846
  1.000000 2.000000 3.000000 4.000000
</source>
 
''(zápis na standardní výstup - příkazové okno)''
 
<source lang=octave>
  n = 8:10;  alfa = [45.246 -349.154 1.750];
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/user/gin/git1/matlab/matlab.pdf#44 formátovací položky]
* viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=44 formátovací položky]


<source lang=octave>
<source lang=octave>
  fprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
tt = 'moje nahodne cislo'; n = 100;
  fprintf('%s (1 az %i): %i\n',tt,n,randi(n));
  moje nahodne cislo (1 az 100): 31
  moje nahodne cislo (1 az 100): 31


  % uložení do řetězce
  % uložení do řetězce
  r = sprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
  r = sprintf('%s (1 az %i): %i\n',tt,n,randi(n))
  class(r)
  class(r)
  ans = char
  ans = char
Řádek 101: Řádek 111:
  % příklad formátování dvou řádkových vektorů  
  % příklad formátování dvou řádkových vektorů  
  a = 1:10
  a = 1:10
  fprintf('a: %.2d -> a^2: %.3d\n', [a; a.^2])
  fprintf('a: %.2d -> a^2: %.3d\n', [a; a.^2]);
  a: 01 -> a^2: 001
  a: 01 -> a^2: 001
  a: 02 -> a^2: 004
  a: 02 -> a^2: 004
Řádek 113: Řádek 123:
  a: 10 -> a^2: 100
  a: 10 -> a^2: 100


  fprintf('a: %2d -> a^2: %3d\n', [a; a.^2])
  fprintf('a: %2d -> a^2: %3d\n', [a; a.^2]);
  a:  1 -> a^2:  1
  a:  1 -> a^2:  1
  a:  2 -> a^2:  4
  a:  2 -> a^2:  4
Řádek 126: Řádek 136:
</source>
</source>


=== Načtení dat z textového souboru ===
=== Formátované čtení dat ===
 
''(čtení z textového souboru)''


<source lang=octave>
<source lang=octave>
  pwd
  fid = fopen('cv3data.txt','r');
f = fopen('vstup.txt')
  bxy = fscanf(fid,'%f',[3,inf]);
  x = fscanf(f,'%f ',[2,inf]);
bxy = bxy';    % pro shodné rozměry matice jako v datovém souboru
  fclose(f)
  fclose(fid);
 
% přeskakování položek
xy = fscanf(fid,'%*f %f %f',[2,inf]);
xy = xy';
</source>
</source>


=== Formátované čtení matice ===
''(čtení z řetězce)''


<source lang=octave>
<source lang=octave>
A = magic(5)
s = sscanf('10.2 5.222','%f %f')
f = fopen('m.txt', 'w');
# 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>


Řádek 159: Řádek 160:


<source lang=octave>
<source lang=octave>
f = fopen('s.txt', 'w+')
fid = fopen('s.txt','w');
fprintf(f, '%f\n', [1 2; 3 4])  
fprintf(fid,'%f\n',[1 2; 3 4]');
fclose(f)
fclose(fid);
type s.txt
type s.txt
1.000000
1.000000
3.000000
2.000000
2.000000
3.000000
4.000000
4.000000
#
 
f = fopen('s.txt')
fid = fopen('s.txt','r');
a = fscanf(f, '%f', [1, inf])
a = fscanf(fid,'%f',[1, inf])
b = fscanf(f, '%f', [2, inf])
b = fscanf(fid,'%f',[2, inf]) % kurzor je již na konci datového souboru s.txt
fseek(f, 0, 'bof');
fseek(fid,0,'bof');            % totožně fseek(fid,0,-1); anebo frewind(fid);
b = fscanf(f, '%f', [2, inf])
b = fscanf(fid,'%f',[2, inf])
fseek(fid,2,'bof');
c = fscanf(fid,'%f',[2, inf])
fclose all;
</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

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í

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

 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;

Úlohy