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

Z GeoWikiCZ
mBez shrnutí editace
mBez shrnutí editace
Řádek 57: Řádek 57:


  % změna dimenze matice při zápisu
  % změna dimenze matice při zápisu
  fid = fopen('a1.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 a1.txt  
  type a2.txt  
  5.272319 6.032164 4.710683
  5.272319 6.032164 4.710683     % nejde o transpozici !!!
  3.489846 3.702292 9.547577
  3.489846 3.702292 9.547577
  9.105915 4.923848 6.948680
  9.105915 4.923848 6.948680
Řádek 67: Řádek 67:


  % změna formátování
  % změna formátování
  fid = fopen('a2.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 a2.txt
  type a3.txt
  5.3 6.0 4.7 3.5
  5.3 6.0 4.7 3.5
  3.7 9.5 9.1 4.9
  3.7 9.5 9.1 4.9
Řádek 76: Řádek 76:


  % zápis dat do již existujícího souboru
  % zápis dat do již existujícího souboru
  fid = fopen('a.txt','a');
  fid = fopen('a1.txt','a');
  fprintf(fid,'%f %f %f %f\n',A(1,:));
  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 a.txt
  type a1.txt
  5.272319 6.032164 4.710683 3.489846
  5.272319 6.032164 4.710683 3.489846
  3.702292 9.547577 9.105915 4.923848
  3.702292 9.547577 9.105915 4.923848
  6.948680 8.851383 7.628851 6.733618
  6.948680 8.851383 7.628851 6.733618
  5.272319 3.489846 9.105915 8.851383
  5.272319 6.032164 4.710683 3.489846
</source>
</source>



Verze z 1. 3. 2017, 23:18

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);
 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 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
 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í
 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

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