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

Z GeoWikiCZ
mBez shrnutí editace
(Není zobrazeno 43 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 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, <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 {{bullet}} <code>delete</code>, viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38]
#* manipulace se soubory viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=38] {{bullet}} <code>delete</code>
# jednoduché načtení z textového souboru [http://peso.fsv.cvut.cz/vyuka/git1/vstup.txt  vstup.txt]
# zápis matice do textového souboru / na standardní výstup
 
 
# zápis matice do textového souboru
# formátování výstupu
# formátování výstupu
# čtení matice z textového souboru
# č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 20: Řá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 29: Řádek 28:


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


=== Načtení dat z textového souboru ===
=== Formátovaný zápis matice ===
 
''(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>
pwd
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
f = fopen('vstup.txt')
fid = fopen('a.txt','w');
x = fscanf(f,'%f ',[2,inf]);
fprintf(fid,'%f %f %f %f\n',A);
fclose(f)
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
</source>
</source>


''(zápis na standardní výstup - příkazové okno)''


=== Formátovaný zápis matice ===
<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>


* [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38 fopen()]
''(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)''


<source lang=octave>
<source lang=octave>
A = rand(3,4) * 10;
disp(alfa)
f = fopen('a.txt', 'w');
disp('text')
fprintf(f, '%f %f %f %f\n', A);
fclose(f); # zápis je proveden až při uzavření souboru
type a.txt
5.272319 6.032164 4.710683 3.489846
3.702292 9.547577 9.105915 4.923848
6.948680 8.851383 7.628851 6.733618
#
# změna dimenze matice při zápisu
f = fopen('a1.txt', 'w');
fprintf(f, '%f %f %f\n', A);
fclose(f);
type a1.txt
5.272319 6.032164 4.710683
3.489846 3.702292 9.547577
9.105915 4.923848 6.948680
8.851383 7.628851 6.733618
#
# změna formátování
f = fopen('a2.txt', 'w');
fprintf(f, '%.1f %.1f %.1f %.1f\n', A);
fclose(f);
type a2.txt
5.3 6.0 4.7 3.5
3.7 9.5 9.1 4.9
6.9 8.9 7.6 6.7
#
# zápis dat do již existujícího souboru
f = fopen('a.txt', 'a');
fprintf(f, '%f %f %f %f\n', A(1,:));
fclose(f);
type a.txt
5.272319 6.032164 4.710683 3.489846
3.702292 9.547577 9.105915 4.923848
6.948680 8.851383 7.628851 6.733618
5.272319 3.489846 9.105915 8.851383
</source>
</source>


=== Formátování dat obecně ===
=== Formátování dat obecně ===


* viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#41 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;
moje nahodne cislo (1 az 100): 31
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: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
% uložení do řetězce
class(r)
r = sprintf('%s (1 az %i): %i\n',tt,n,randi(n))
ans = char
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


% 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 ===
=== Formátované čtení dat ===
 
''(čtení z textového souboru)''


<source lang=octave>
<source lang=octave>
A = magic(5)
fid = fopen('cv3data.txt','r');
f = fopen('m.txt', 'w');
bxy = fscanf(fid,'%f',[3,inf]);
# uložení jako sloupcový vektor
bxy = bxy';    % pro shodné rozměry matice jako v datovém souboru
fprintf(f, '%f\n', A);
fclose(fid);
fclose(f);
 
type m.txt
% přeskakování položek
# znovunačtení do dimenze [5x5]
xy = fscanf(fid,'%*f %f %f',[2,inf]);
f = fopen('m.txt', 'r');
xy = xy';
B = fscanf(f, '%f', [5, inf])
</source>
#
 
# čtení z řetězce
''(čtení z řetězce)''
s = sscanf('10.2 5.222', '%f %f')
 
#
<source lang=octave>
# přeskakování položek
s = sscanf('10.2 5.222','%f %f')
s = sscanf('10.2 5.222 4.2', '%f %*f %f')
fclose(f);
</source>
</source>


Řádek 155: Řá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