Witam i witam ponownie.
W tym wykładzie przedstawię nasze poprzednie wyzwanie, które polega
na wydrukowaniu zawartości pliku w odwrotnej kolejności.
Musisz więc zrozumieć metodę ftel i metodę fseek.
Przywołajmy bloki kodu i stwórzmy nowy projekt.
A ten projekt będzie aplikacją konsolową.
Nadamy mu po
prostu nazwę, wydrukuj zawartość pliku w
odwrotnej kolejności.
Najpierw utworzymy nasz plik, który zawiera puste dane, ponieważ
musimy z niego odczytać. Więc wrócę do mojego katalogu pobierania, w którym
znajdują się moje projekty bloków kodu.
I mam zamiar przejść
do projektu,
który właśnie utworzyłem, o nazwie print file content.
Więc to jest tutaj. Po prostu utworzę nowy plik, plik tekstowy.
Powiemy nowy dokument tekstowy. Nazwijmy to testem. tekst.
A potem w środku, po prostu zrobię
normalne cześć, nazywam
się Jason, jak się masz, mam się dobrze.
I co to zrobi, zapiszę to, a potem zaczniemy drukować koniec.
Powinien więc wypisać enif space gniod i tak dalej, aż dotrze do początku.
Wrócimy więc do bloków kodu i będziemy
musieli uwzględnić nasze standardowe IO, ponieważ
zawiera ono wszystkie nasze funkcje. Stworzymy stałą,
w tym przypadku zdefiniujemy.
A to będzie się nazywać nazwa pliku, to będzie się nazywać test. tekst.
Najpierw będę musiał utworzyć mój wskaźnik pliku, więc wszystkie zakrywają FILE
star fp i ustawię go na null, zainicjuj go.
Następnie utworzę również kilka liczników i coś,
co będzie reprezentować to, z czego jest zwracane - będę nosić
licznik dla mojej pętli,
a następnie liczbę rzeczywistych bajtów zwracanych z ftell.
Więc powiem, że liczba równa się zero, a następnie
zmienna kontrolna pętli do I równa się zero.
Zrobię swoje normalne. Muszę otworzyć mój plik. Powiem, że fp równa
się fopen i podam nazwę pliku. Przekażę tylko do odczytu, więc po prostu r.
Upewnię się, że to nie jest zerowe. Więc powiem, że jeśli fp jest równe null,
to po prostu zwrócę ujemną 1.
W przeciwnym razie będę szukać końca pliku.
Więc chcę zrobić fseek.
Tutaj mam zamiar wywołać funkcję fseek.
To zmieni miejsce, na które wskażę. Przekażę wskaźnik mojego pliku.
Przekażę zero dla naszego drugiego parametru.
W przypadku trzeciego parametru powiem „szukaj do końca”.
Więc zamierzam wykorzystać ten ciągły koniec poszukiwań.
I to ustawi mój wskaźnik pliku na koniec fp,
czyli test. tekst.
Kiedy już dojdę do końca, chcę ustawić mój rzeczywisty licznik na
to, na co wskazuje ftell. Więc chcę wrócić tam, gdzie jestem.
Więc tutaj mam zamiar uzyskać położenie wskaźnika pliku.
A fseek faktycznie zmienił
pozycję, więc przesuwa wskaźnik pliku na koniec pliku.
Więc najpierw go przesuwam, a potem otrzymuję pozycję. Mogę uzyskać pozycję za pomocą ftell.
W przypadku ftell zwraca pozycję, więc zostanie ona zapisana w count i
powiem, że f count równa się f tell, a następnie przekażę ją do wskaźnika pliku.
Kiedy już mam pozycję, mogę napisać pętlę while, która
mówi, że idź od pozycji lub licznika, który jest moją zmienną kontrolną pętli, aż do końca.
Więc tutaj mogę powiedzieć, że jestem mniej niż liczyć, ponieważ
chcę w zasadzie przeczytać wszystko od końca do początku.
A więc w tym miejscu chcę powiedzieć, że zwiększ moją zmienną I.
A potem chcę szukać, chcę zmienić miejsce, do którego się przenoszę. Więc chcę powiedzieć fseek, a
chcę wskazać na fp.
Chcę wskazać negatywne „ja”, ponieważ przechodzę
od początku do początku i chcę powiedzieć „szukaj końca”.
Tak negatywnie, że od końca będzie tyle bajtów.
Więc najpierw mogłem przejść do końca, a
potem chcę zmienić swoją pozycję, aby móc zacząć czytać w każdym znaku.
Kiedy już szukam końca, mogę po prostu
wydrukować postać, przeczytać ją
i wydrukować. Więc tutaj mogę po prostu
powiedzieć procent c, a następnie mogę powiedzieć fgetc
i mój wskaźnik pliku.
Więc znowu, to, co tutaj robię, odbywa się w linii 22 lub 19,
najpierw przesuwam wskaźnik na koniec.
Następnie otrzymuję licznik, ponieważ powie mi, jak długo mam czytać w każdym bajcie
za pomocą ftell.
Wtedy moja pętla while przejdzie od zera do końca,
aby policzyć, ile bajtów chcę wczytać.
W linii 26. zwiększę licznik.
Następnie przejdę do tylu bajtów od końca, czyli
minus ja od końca. A potem wiersz 28, przeczytam ten znak i wydrukuję go.
I to jest główna logika programu.
Jedyne, co muszę zrobić, to wydrukować znak nowego wiersza na
końcu, aby ułatwić czytanie. Chcę zamknąć wskaźnik pliku.
Chcę więc powiedzieć fp, a potem po prostu zwrócić
i prawdopodobnie chcę ustawić fp równe null.
Spróbujmy więc to skompilować i mamy nadzieję, że
plik zostanie wydrukowany w odwrotnej kolejności.
Nie zmieniamy zawartości pliku, po
prostu wczytujemy go od końca do początku za pomocą naszych funkcji pozycji.
Więc kiedy to uruchomimy, powinniśmy zobaczyć
odwrotną lub odwrotną kolejność. Zauważysz tutaj, że widzimy odwrotną kolejność.
Więc najpierw drukujemy ostatni plik.
A jeśli wyświetlimy ten plik w naszym katalogu pobierania,
zauważysz, że
jest on drukowany jako wynik.
Wydrukowuje enif
space gniod i tak dalej.
Ostatnia wydrukowana linia to cześć, mam na imię Jason w odwrotnej kolejności.
Jest to więc po prostu zgrabny mały
program, który użyje wskaźników plików, aby rozpocząć na końcu,
a następnie przejść do początku i wydrukować zawartość w odwrotnej kolejności.
Zwróć więc uwagę, jak używamy fseek, zwróć uwagę, jak używamy ftell.
Fseek przesuwa wskaźnik pliku, ftell faktycznie podaje lokalizację,
w której się znajdujesz.
Więc teraz możesz użyć liczenia, aby przejść w odwrotnej kolejności.
I znowu, użyj ujemnego I, aby powiedzieć, ile bajtów od końca
i fgetc ze wskaźnikiem pliku.
Podam ten kod źródłowy jako rozwiązanie, które możesz porównać, przyjrzeć się
i przeanalizować bardziej szczegółowo. Mam nadzieję, że to pomogło. Dziękuję Ci.