146____Programowanie w MATLABi
A
dlsp(['11czba elementów-' num2str(Hczba)3) fclose(fld):
Po pomyślnym otwarciu pliku, którego nazwę podaje się z klawiatury, dokonuj! się odczytu pierwszej linii w pliku za pomocą fgetl. Odczytu i wypisania elementów macierzy zapisanej w pliku dokonuje fscanf.
fgetl czyta wiersze w pliku bez uwzględniania znaku zmiany wiersza. Jeżeli poJ lecenie to zostanie wykorzystane zgodnie ze składnią:
treśćjwiersza = fgetl (fid)
to zachodzi zwracanie następnego wiersza (bez znaku końca wiersza) pliku identyfj kowanego przez fid (fid jest zwracane przez fopen). Jeżeli zostanie osiągnięty koniej pliku, to zwracane jest -1. fgetl jest przeznaczone do stosowania tylko z plikami teki stowymi.
fscanf powoduje odczyt sformatowanych danych z pliku. Może ono posiadać na-1 stępującą składnię:
[A, ilość] = fscanf(fid, format, wymiar)
Zastosowanie fscanf z taką składnią powoduje odczyt danych z pliku, który posiada iden-j tyfikator fid, dokonuje ich konwersji zgodnie z podanym format-em i zwraca macierz A. 1 ilość jest wyjściowym parametrem opcjonalnym, który zawiera liczbę elementów od-j czytanych efektywnie.
Parametr wymiar jest opcjonalny i określa liczbę elementów, które mogą być odczyl tane z pliku. Jeżeli nie zostanie wyspecyfikowany, oznacza to cały plik. Może przyj! mować następujące wartości:
n - czyta w najlepszym razie n elementów wektora kolumnowego; inf-powoduje odczyt do końca pliku;
[m,n] - odczyt przynajmniej mxn elementów, n może być inf (m natomiast nie), j Znaczenie parametru format jest takie samo jak poprzednio, fscanf jest wektorową wersją polecenia fscanf występującego w języku C.
Ćwiczenie 6
Napisać m-plik, który umożliwia zapis wektora A = 1:5 do pliku binarnego jb.N a następnie odczytuje wartość elementu znajdującego się na szóstej pozycji w pliku.
Rozwiązanie
Zadanie zostało rozwiązane w następującym m-pliku:
X t0206_25 Ustawianie wskaźnika na danej pozycji X w pliku, a następnie odczyt wskazywanej wartości
elear $ format compact f1d«0;
whlle f1d<l
d1sp('Nazwa pliku - może byc wraz ze ścieżka'). NP—1 nput('Podaj nazwę pliku % NP-Nazwa_pl 1 ku [f1d,komun1kat]-fopen(NP,'w');
A-1nput('Podaj dane ’);
A
fwr1te(f1d,A,1 short*):
1f fid— 1
dlsp(komunikat)
eh<t end
fclose(f 1 d);
dlSp( 11 ’ )
dlspCPonowne otwarcie pliku do odczytu')
d1sp('Nac1sn1 j dowolny klawisz')
pause
f1d—fopen(NP, * r');
disp('Ustawien1 e wskaźnika na pozycji 6 Ucząc') dlspCod początku pliku '):d1sp('PoczekaJ');
status-fseek(f1d,6,'bof'): dispCGdzie bedzie wskaźnik ?')
położeni e_wskazn1 ka-ftel 1 (f 1 d) dlspCJaka wartość zostanie odczytana w tej pozycji ?')
odczytana_wartosc-fread(f1d,l, 'short') fclose(fld);
Ćwiczenie to jest opisane w firmowej instrukcji obsługi MATLAB-a Using MATLAli -Computation, Visualization, Programming.
W momencie otwarcia pliku za pomocą fopen jest obsługiwuny wskaźnik pozycji pliku, określający miejsce w pliku, w którym zajdzie następna operacja odczytu lub zapisu. Do sterowania położeniem tego wskaźnika wykorzystywane są następujące polecenia:
fseek - powoduje ustawienie wskaźnika pozycji pliku w określonym miejscu. Składnia polecenia jest następująca:
status = fseek (fid, wartośćjrrzesunięcia, wartość^początkowa)
/iz/jcst liczbą całkowitą zwracaną przez fopen. wartość_przesunięcia jest identyfikowana następująco:
>0 przesunięcie w kierunku końca pliku,
=0 bez zmiany pozycji,