155GIT1 / 3. cvičení: Porovnání verzí
mBez shrnutí editace |
|||
Řádek 42: | Řádek 42: | ||
A = 10 * rand(3,4) | A = 10 * rand(3,4) | ||
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 | ||
Řádek 51: | Řádek 51: | ||
% 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('a1.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 a1.txt | ||
Řádek 60: | Řádek 60: | ||
% změna dimenze matice při zápisu (transponovaný zápis) | % změna dimenze matice při zápisu (transponovaný zápis) | ||
fid = fopen('a2.txt','w'); | fid = fopen('a2.txt','w'); | ||
fprintf(fid,'%f %f %f\n',A) | fprintf(fid,'%f %f %f\n',A); | ||
fclose(fid); | fclose(fid); | ||
type a2.txt | type a2.txt | ||
Řádek 70: | Řádek 70: | ||
% změna formátování | % změna formátování | ||
fid = fopen('a3.txt','w'); | fid = fopen('a3.txt','w'); | ||
fprintf(fid,'%.1f %.1f %.1f %.1f\n',A') | fprintf(fid,'%.1f %.1f %.1f %.1f\n',A'); | ||
fclose(fid); | fclose(fid); | ||
type a3.txt | type a3.txt | ||
Řádek 79: | Řádek 79: | ||
% 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('a1.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 a1.txt | ||
Řádek 92: | Řádek 92: | ||
<source lang=octave> | <source lang=octave> | ||
n = 8:10; alfa = [45.246 -349.154 1.750]; | n = 8:10; alfa = [45.246 -349.154 1.750]; | ||
fprintf('pro bod %2.f je uhel = %7.2f°\n',[n; alfa]) | fprintf('pro bod %2.f je uhel = %7.2f°\n',[n; alfa]); | ||
</source> | </source> | ||
Řádek 101: | Řádek 101: | ||
<source lang=octave> | <source lang=octave> | ||
tt = 'moje nahodne cislo'; n = 100; | tt = 'moje nahodne cislo'; n = 100; | ||
fprintf('%s (1 az %i): %i\n',tt,n,randi(n)) | 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 | ||
Řádek 111: | Řá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 123: | Řá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 156: | Řádek 156: | ||
<source lang=octave> | <source lang=octave> | ||
fid = fopen('s.txt','w+'); | fid = fopen('s.txt','w+'); | ||
fprintf(fid,'%f\n', [1 2; 3 4]) | fprintf(fid,'%f\n', [1 2; 3 4]); | ||
fclose(fid) | fclose(fid); | ||
type s.txt | type s.txt | ||
1.000000 | 1.000000 | ||
Řádek 164: | Řádek 164: | ||
4.000000 | 4.000000 | ||
fid = fopen('s.txt') | fid = fopen('s.txt'); | ||
a = fscanf(fid,'%f', [1, inf]) | a = fscanf(fid,'%f', [1, inf]) | ||
b = fscanf(fid,'%f', [2, inf]) | b = fscanf(fid,'%f', [2, inf]) | ||
fseek(fid, 0, 'bof'); | fseek(fid, 0, 'bof'); | ||
b = fscanf(fid,'%f', [2, inf]) | b = fscanf(fid,'%f', [2, inf]) | ||
fclose all; | |||
</source> | </source> | ||
Verze z 2. 3. 2017, 15:51
Textové řetězce, workspace, čtení a zápis matic z/do textových souborů
Náplň cvičení
- textové řetězce
- datové typy •
class()
- workspace •
whos
•save
,load
,clear
- manipulace se soubory viz [1] •
delete
- manipulace se soubory viz [1] •
- zápis matice do textového souboru / na standardní výstup
- formátování výstupu
- č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
(zápis do souboru)
- funkce fopen() a její atributy
A = 10 * rand(3,4)
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
5.272319 3.702292 6.948680 6.032164 % ve výpisu matice je nesprávné pořadí prvků !!!
9.547577 8.851383 4.710683 9.105915
7.628851 3.489846 4.923848 6.733618
% správný výpis matice (správný rozměr a pořadí prvků)
fid = fopen('a1.txt','w');
fprintf(fid,'%f %f %f %f\n',A');
fclose(fid);
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 dimenze matice při zápisu (transponovaný zápis)
fid = fopen('a2.txt','w');
fprintf(fid,'%f %f %f\n',A);
fclose(fid);
type a2.txt
5.272319 3.702292 6.948680
6.032164 9.547577 8.851383
4.710683 9.105915 7.628851
3.489846 4.923848 6.733618
% změna formátování
fid = fopen('a3.txt','w');
fprintf(fid,'%.1f %.1f %.1f %.1f\n',A');
fclose(fid);
type a3.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
fid = fopen('a1.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 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
5.272319 6.032164 4.710683 3.489846
(zápis na standardní výstup - příkazové okno)
n = 8:10; alfa = [45.246 -349.154 1.750];
fprintf('pro bod %2.f je uhel = %7.2f°\n',[n; alfa]);
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í matice z textového souboru
pwd
fid = fopen('vstup.txt');
x = fscanf(fid,'%f',[2,inf]);
fclose(fid);
% č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')
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
3.000000
2.000000
4.000000
fid = fopen('s.txt');
a = fscanf(fid,'%f', [1, inf])
b = fscanf(fid,'%f', [2, inf])
fseek(fid, 0, 'bof');
b = fscanf(fid,'%f', [2, inf])
fclose all;