%                     Lecture 12
%                   Formatierter I/O
%

% 
fprintf( 'pi = %6.3f\n',pi)

% Eine nicht ausreichende Feldweite wird angepaßt

fprintf( 'pi = %0.3f\n',pi)

fprintf( 'pi = %6.3f, pi/2 = %6.3f\n',pi,pi/2)

fprintf( 'pi = %5.3e\n',pi)
fprintf( 'pi = %5.3d\n',pi)

fprintf( 'pi = %g\n',pi)
fprintf( 'pi = %5.3g\n',pi)
fprintf('Maschinenepsilon = %g',eps)

% vergleiche
fprintf( 'pi = %8.3f\n',pi)
%und
fprintf( 'pi = %-8.3f\n',pi)    % linksbündig
fprintf( 'pi = %08.3f\n',pi)    % Feld mit Nullen aufgefüllt

fprintf( 'pi = %8.3f',pi), fprintf( 'pi = %-8.3f',pi)

%% spaltenweise Abarbeiten eines Formates

fak = 1./[1 2 6 24 120]'

fprintf('%3s   %5s','n','1/n!')
fprintf('%3.0f   %5.3f\n',[1:5]',fak)   

% Was ist passiert
fprintf('%03.0f   %05.3f\n',[1:5]',fak) 

%Das wollten wir nicht haben
% sondern
fprintf('%3s   %5s\n','n','1/n!')
fprintf('%3.0f   %5.3f\n',[[1:5];fak'])

%Ausgabe in File
fid = fopen('Faktorielle','w')
fprintf(fid,'%3s   %5s\n','n','1/n!');           % Beachte semicolon
fprintf(fid,'%3.0f   %5.3f\n',[[1:5];fak']);
fclose(fid)

% Diese Daten können wieder eingelesen werden
fid = fopen('Faktorielle','r');
%fscanf(fid,'n n!');                   % überlese 1.Zeile
fscanf(fid,'%s %s',2)
x= fscanf(fid,'%g',[2,inf]),
x= x'
fclose(fid)


% weitere Beispiele: Lesen aus einer 3 x 5 Matrix
fid = fopen('bsp_read.m','r')
a=fscanf(fid,'%g',[3,5])  % Zeilen in fread auf Spalten in a
fclose(fid)

fid = fopen('bsp_read.m','r')
a=fscanf(fid,'%g',[5,3])
a=a'                      % Dies entspricht der Ausgangsmatrix
fclose(fid)

%Einlesen eines Teils der Daten
fid = fopen('bsp_read.m','r')
a=fscanf(fid,'%g',[3,3])
fclose(fid)

% Mehr Daten als vorhanden werden gelesen
fid = fopen('bsp_read.m','r')
a=fscanf(fid,'%g ',[4,4])       % Fehlende Daten durch Null ersetzt
fclose(fid)

%
fid = fopen('bsp_read.m','r')
a=fscanf(fid,'%g ',[2,5])       % es werden die ersten 10 Elemente eingelsesen  
b = fscanf(fid,'%g ',[1,inf])   % Nun werden die letzten Elemente gelesen
fclose(fid)
