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

Z GeoWikiCZ
mBez shrnutí editace
mBez shrnutí editace
Řádek 10: Řádek 10:
# zápis matice do textového souboru
# zápis matice do textového souboru
# 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
# čtení dat z textového souboru do matice (ke stažení [http://peso.fsv.cvut.cz/vyuka/git1/vstup.txt vstup.txt])


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


<source lang=octave>
<source lang=octave>
t = 'ahoj, svete!'
t = 'ahoj, svete!'
t(7)
t(7)
t(7:end)
t(7:end)
t(7:end-1)
t(7:end-1)
</source>
</source>


Řádek 26: Řádek 26:


<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)
</source>
</source>


=== Načtení dat z textového souboru ===
=== Formátovaný zápis matice ===
 
* funkce [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#41 fopen()] a její atributy


<source lang=octave>
<source lang=octave>
pwd
A = 10 * rand(3,4);
f = fopen('vstup.txt')
f = fopen('a.txt', 'w');
x = fscanf(f,'%f ',[2,inf]);
fprintf(f, '%f %f %f %f\n', A);
fclose(f)
fclose(f); % zápis je proveden až při uzavření souboru
</source>
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


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


* [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38 fopen()]
% zápis dat do již existujícího souboru
 
f = fopen('a.txt', 'a');
<source lang=octave>
fprintf(f, '%f %f %f %f\n', A(1,:));
A = rand(3,4) * 10;
fclose(f);
f = fopen('a.txt', 'w');
type a.txt
fprintf(f, '%f %f %f %f\n', A);
5.272319 6.032164 4.710683 3.489846
fclose(f); # zápis je proveden až při uzavření souboru
3.702292 9.547577 9.105915 4.923848
type a.txt
6.948680 8.851383 7.628851 6.733618
5.272319 6.032164 4.710683 3.489846
5.272319 3.489846 9.105915 8.851383
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/user/gin/git1/matlab/matlab.pdf#44 formátovací položky]


<source lang=octave>
<source lang=octave>
fprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
fprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
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: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
class(r)
class(r)
ans = char
ans = char
#
 
# 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
a: 03 -> a^2: 009
a: 03 -> a^2: 009
a: 04 -> a^2: 016
a: 04 -> a^2: 016
a: 05 -> a^2: 025
a: 05 -> a^2: 025
a: 06 -> a^2: 036
a: 06 -> a^2: 036
a: 07 -> a^2: 049
a: 07 -> a^2: 049
a: 08 -> a^2: 064
a: 08 -> a^2: 064
a: 09 -> a^2: 081
a: 09 -> a^2: 081
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
a:  3 -> a^2:  9
a:  3 -> a^2:  9
a:  4 -> a^2:  16
a:  4 -> a^2:  16
a:  5 -> a^2:  25
a:  5 -> a^2:  25
a:  6 -> a^2:  36
a:  6 -> a^2:  36
a:  7 -> a^2:  49
a:  7 -> a^2:  49
a:  8 -> a^2:  64
a:  8 -> a^2:  64
a:  9 -> a^2:  81
a:  9 -> a^2:  81
a: 10 -> a^2: 100
a: 10 -> a^2: 100
</source>


=== Načtení dat z textového souboru ===
<source lang=octave>
pwd
f = fopen('vstup.txt')
x = fscanf(f,'%f ',[2,inf]);
fclose(f)
</source>
</source>



Verze z 1. 3. 2017, 22:14

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 • save, load, clear, whos
    • manipulace se soubory viz [1]delete
  4. zápis matice do textového souboru
  5. formátování výstupu
  6. čtení dat z textového souboru do matice (ke stažení vstup.txt)

Ukázky

Řetězce

 t = 'ahoj, svete!'
 t(7)
 t(7:end)
 t(7:end-1)

Datové typy

 class(t)
 A = [1 2; 3 4]
 class(A)
 class(1)
 class(2.3)

Formátovaný zápis matice

 A = 10 * rand(3,4);
 f = fopen('a.txt', 'w');
 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

Formátování dat obecně

 fprintf('%s: %i\n', 'moje nahodne cislo (1 az 100)', randi(100))
 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))
 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

Načtení dat z textového souboru

 pwd
 f = fopen('vstup.txt')
 x = fscanf(f,'%f ',[2,inf]);
 fclose(f)

Formátované čtení matice

A = magic(5)
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);

Změna polohy kurzoru v souboru

f = fopen('s.txt', 'w+')
fprintf(f, '%f\n', [1 2; 3 4]) 
fclose(f)
type s.txt
1.000000
3.000000
2.000000
4.000000
#
f = fopen('s.txt')
a = fscanf(f, '%f', [1, inf])
b = fscanf(f, '%f', [2, inf])
fseek(f, 0, 'bof');
b = fscanf(f, '%f', [2, inf])


Úlohy