155GIT1 / 3. cvičení: Porovnání verzí
mBez shrnutí editace |
mBez shrnutí editace |
||
Řádek 6: | Řádek 6: | ||
# textové řetězce | # textové řetězce | ||
# datové typy {{bullet}} <code>class()</code> | # datové typy {{bullet}} <code>class()</code> | ||
# workspace, <code> | # workspace, <code>save</code>, <code>load</code>, <code>clear</code>, <code>whos</code> | ||
# manipulace se soubory {{bullet}} <code>delete</code>, viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf# | # manipulace se soubory {{bullet}} <code>delete</code>, viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38] | ||
# jednoduché načtení z textového souboru [http://peso.fsv.cvut.cz/vyuka/git1/vstup.txt vstup.txt] | # 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 | |||
# formátování výstupu | |||
# čtení matice z textového souboru | |||
== Ukázky == | == Ukázky == | ||
Řádek 25: | Řádek 30: | ||
<source lang=octave> | <source lang=octave> | ||
class(t) | class(t) | ||
A = [1 | A = [1 2; 3 4] | ||
class(A) | class(A) | ||
class(1) | class(1) | ||
Řádek 39: | Řádek 44: | ||
fclose(f) | fclose(f) | ||
</source> | </source> | ||
=== Formátovaný zápis matice === | |||
* [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#38 fopen()] | |||
<source lang=octave> | |||
A = rand(3,4) * 10; | |||
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 | |||
</source> | |||
=== Formátování dat obecně === | |||
* viz [http://geo.fsv.cvut.cz/user/gin/git1/matlab/matlab.pdf#41 formátovací položky] | |||
<source lang=octave> | |||
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 | |||
</source> | |||
=== Formátované čtení matice === | |||
<source lang=octave> | |||
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); | |||
</source> | |||
=== Změna polohy kurzoru v souboru === | |||
<source lang=octave> | |||
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]) | |||
</source> | |||
== Úlohy == | == Úlohy == | ||
* http://peso.fsv.cvut.cz/vyuka/git1/3.html | * http://peso.fsv.cvut.cz/vyuka/git1/3.html | ||
* http://peso.fsv.cvut.cz/vyuka/git1/4.html |
Verze z 1. 3. 2017, 20:53
Textové řetězce, workspace
Náplň cvičení
- textové řetězce
- datové typy •
class()
- workspace,
save
,load
,clear
,whos
- manipulace se soubory •
delete
, viz [1] - jednoduché načtení z textového souboru vstup.txt
- zápis matice do textového souboru
- formátování výstupu
- čtení matice z textového souboru
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)
Načtení dat z textového souboru
pwd
f = fopen('vstup.txt')
x = fscanf(f,'%f ',[2,inf]);
fclose(f)
Formátovaný zápis matice
A = rand(3,4) * 10;
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
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])