Witam i witam ponownie.
W tym wykładzie chciałbym porozmawiać
o tym, jak możemy odczytać tekst z pliku.
Na razie będziemy to robić skoncentruj się na czytaniu plików tekstowych.
Więc jeśli chcemy czytać znak z pliku tekstowego
użyjemy kilku funkcji.
Pierwszym będzie fgetc.
Spowoduje to odczytanie znaku z tekstu plik, który został otwarty do odczytu.
Pamiętaj, że zawsze musimy się otwierać w górę pliku, zanim będziemy mogli wykonać na
nim jakiekolwiek operacje na plikach, chyba że jest to zmiana nazwy lub
usunięcie, a następnie plik nie może zostać otwarty.
Ale jeśli chcesz czytać i pisząc lub dołączając,
musimy otworzyć ten plik.
Wiemy, że możemy się otworzyć pliki z różnymi trybami.
W tym przypadku do czytania mielibyśmy aby otworzyć za pomocą r lub r
plus, a następnie możemy rozpocząć wywoływanie fgetc.
Funkcja fgetc przyjmuje wskaźnik pliku jako jedyny
argument i zwróci znak odczytywany jako typ int.
Oto przykład, tworzymy mchar wpisz int i mówimy fgetc pfile.
Będzie czytać postać do zmiennej mchar z pfile
jako wskaźnikiem pliku.
Pomyśl o pliku pfile już było otwarty powrót do wskaźnika pliku.
Mchar jest typu, ponieważ eof, który jest naszym znakiem
specjalnym, naszym końcem pliku, jest zwracany, jeśli osiągnięto koniec pliku.
Więc zawsze możemy to sprawdzić liczba całkowita, aby sprawdzić, czy jest to eof.
A jeśli tak, to nie chcemy
czytać, nie chcemy już nazywać fgetc.
Funkcja fgetc, czyli jest również dostępny odpowiednik fgetc.
Więc getc jest prawie tym samym, co fgetc, po prostu chcesz użyć fgetc.
Myślę, że ma trochę więcej ochrony w nim.
W przypadku getc wymaga argumentu pliku typu star i zwraca i
zwraca znak czerwony jako typ int.
Jest praktycznie identyczny z fgetc.
Jedyna różnica między nimi jest to, że getc może być zaimplementowane jako makro,
a my nawet tego nie robimy wiesz, czym jest teraz makro.
Więc będziemy się trzymać używanie fgetc jako naszej funkcji do
czytania znaków.
Możesz przeczytać zawartość pliku.
W razie potrzeby możesz ponownie użyć ta funkcja przewijania, która pozycjonuje
plik określony przez plik wskaźnik do początku pliku.
Możesz więc użyć przewijania do tyłu, jeśli chcesz przeczytać ponownie.
Po prostu powiedz przewiń do tyłu, a następnie wskaźnik pliku, całkiem prosty.
Oto przykład.
Musisz dołączyć rozszerzenie standardowy nagłówek io za każdym razem,
gdy wykonujemy jakiekolwiek operacje na plikach.
W naszej głównej funkcji jesteśmy utworzymy nasz wskaźnik do pliku.
Jeśli chcę zainicjować to do null i utworzymy liczbę całkowitą.
Pierwszą rzeczą, którą zamierzamy zrobić, jest to, że jesteśmy zamierzamy
otworzyć plik przy użyciu wywołania open f, a my zamierzamy to określić nazwę pliku i zamierzamy określić, że
jest on przeznaczony do odczytu.
To zwróci nasz wskaźnik pliku.
Więc teraz nasz wskaźnik fp to wskazując na prawidłowy plik.
Jeśli nie mógł otworzyć pliku. tekst to nie jest na
właściwej ścieżce lub cokolwiek innego, zwróci wartość null.
Chcesz więc sprawdzić, czy nie ma wartości null, upewnij się, że fp nie jest zerowe.
Jeśli ma wartość null, zamknij program.
W przeciwnym razie, kiedy zwykle czytać znaki, będziesz mieć
je wewnątrz pętli.
Więc tutaj mówimy, podczas gdy c równa się fgetc fp, to jest odczytanie znaku
z naszego pliku, przekazanie wskaźnika pliku do fgetc, który zwraca
liczbę całkowitą.
Pamiętaj, że możemy wyskoczyć z pętli jeśli ta zwrócona liczba całkowita jest końcem
pliku, ponieważ nie chcemy czytać poza końcem pliku.
W przeciwnym razie możemy po prostu wydrukować nasz znak używając procentów c i c.
Ostatnią rzeczą, jaką chcemy zrobić, to my chcemy zamknąć plik, wtedy chcemy
ustawić nasz wskaźnik pliku do zera i możemy wrócić.
Spróbujmy to wykorzystać, tworząc to wewnątrz bloków kodu.
Oto nasz program wewnątrz bloków kodu.
Mówi, że ten program się nie uda działać, chyba że mamy plik na dysku,
gdziekolwiek program jest uruchomiony.
Więc najpierw, jeśli to zbudujemy, powinien dobrze się skompilować,
powinien stworzyć plik wykonywalny gdzieś na dysku twardym.
Włożyłem wszystkie moje projekty w moim katalogu pożyczek dot.
Więc jeśli przejdę do moich plików do pobrania katalogu
i przechodzę do nazwy projektu, który jest tylko testem projekt, więc gdziekolwiek przechowujesz swoje projekty,
moje są testowane.
Jeśli pójdę na test, zobaczysz że w katalogu bin, wewnątrz debugowania
znajduje się plik wykonywalny.
Tutaj tworzysz swój plik plik, jeśli miałeś krewnego.
Ścieżka, więc tutaj mogę po prostu utworzyć plik nowy plik i możemy go mieć jako plik tekstowy,
więc mogę po prostu utworzyć go jako tekst dokument i musi mieć nazwę plik.
A potem mam zamiar umieścić jakieś informacje w nim.
Zamierzam tylko podać trochę danych takie jak cześć, to jest kanał liniowy Jason.
OK, nie, tak dalej, i zamierzam to zapisać.
Ten plik musi istnieć w aby ten program działał.
Więc stworzyłem plik.
Mam nadzieję, że teraz, kiedy go uruchomię przeczyta to, co
właśnie do niego dodałem i wydrukuje.
Mówi o błędzie i otwieraniu pliku plik nie ma takiego
katalogu plików, a to prawdopodobnie dlatego, że ja umieścić go w folderze debugowania.
I to nie działa w debugowaniu.
Spróbujmy więc uruchomić go w debugowaniu i Myślę, że teraz to prawdopodobnie zadziała.
Możemy powiedzieć debug, start.
Spowoduje to wyszukanie pliku wykonywalnego miejmy nadzieję, że w katalogu debugowania.
Chcemy się upewnić, że jest uruchomiony.
Nadal nie ma, więc musisz zrobić na pewno wiesz, gdzie jest plik wykonywalny.
Spróbujmy gdzie indziej lub jeszcze lepiej mogłem po prostu uruchomić plik wykonywalny wewnątrz
debugowania katalogu i powinien go tam znaleźć.
Jeśli więc kliknę tutaj dwukrotnie, to właściwie nie zatrzymuje się.
Wyskakuje.
Więc co możesz w tym celu
zrobić zamiast wracać, możesz powiedzieć, że system zatrzyma się i nie zostanie zamknięty program, dopóki go nie uruchomisz.
Więc spróbujmy teraz.
Więc teraz wstrzymałem, nie wykonać program.
A to, co widziałeś, to cześć, tu Jason.
Udało mu się znaleźć plik, wydrukowane w porządku, wydrukowane
nie, a następnie zatrzymane.
W przeciwnym razie, gdy wykonasz program, tak szybko drukuje
dane i wychodzi z program, który skończyłeś.
Więc tak możesz to przetestować.
Musi być przechowywany tam, gdzie plik wykonywalny jest przechowywany w miejscu, z którego jest uruchomiony.
Musi skądś uciekać else w katalogu twojego projektu.
Nie jestem pewien, skąd to ucieka.
Moglibyśmy spróbować przenieść plik do miejsca, w którym znajduje się kod źródłowy.
Może go stąd uruchamiać.
Więc tutaj umieścimy to tutaj.
A teraz spróbujemy go uruchomić z ID i może zadziała.
Nie budujemy.
Uruchomiliśmy go i udało mu się go znaleźć.
Więc wygląda na to, że mamy aby umieścić plik w miejscu, w którym znajduje
się kod źródłowy.
Tak długo, jak umieścimy ten plik plik. tekst w pliku
projektu, będziesz mógł go zobaczyć.
Tak szybki przykład, jak możesz otwórz plik i czytaj pojedyncze znaki, nie
jest to najbardziej wydajne sposób czytania z pliku, ponieważ zwykle
chcesz czytać ciągi.
Ale to go otworzy.
Zobaczysz otwarte wezwanie f i zauważysz pętlę while.
To jest ważne.
Wróćmy i porozmawiajmy o tym, jak to zrobić możemy czytać łańcuchy z pliku,
który jest znacznie wydajniejszy.
Więc to jest czytanie pojedynczego znaku.
Co powiesz na odczytanie napisu?
Możesz użyć funkcji fgets czytać z dowolnego pliku lub strumienia.
Spowoduje to odczytanie ciągu.
Zajmuje ciąg znaków ma pierwszy parametr.
Liczba znaków, które chcesz przeczytaj, a następnie rzeczywisty wskaźnik pliku.
Więc ta funkcja będzie odczytaj łańcuch w obszarze
pamięci wskazanym przez str.
Więc właściwie musisz przekazać do bufora, w
którym będą przechowywane dane.
I to jest wskaźnik, więc możesz trzeba przeznaczyć na to pamięć.
A potem będzie czytany z plik określony jako trzeci parametr,
który jest wskaźnikiem pliku.
A potem nchar idzie powiedzieć, ile danych odczytać.
Więc jeśli umieścisz nzar jako 10, będzie czytać za 10 znaków, chyba że
najpierw trafi do nowego wiersza.
Więc albo przeczyta plik cały wiersz lub odczyta liczbę znaków,
które masz określić w drugim parametrze.
Koniec linii jest określony przez ukośnik odwrotny n, w zależności od tego, co nastąpi wcześniej.
Jeśli znak nowej linii jest czerwony, jest zachowywany w
łańcuchu i będzie to terminator o wartości null dołączane na końcu łańcucha.
Więc jeśli faktycznie określiłeś więcej znaków, czyta do końca wiersza,
a następnie wyskakuje, a następnie pobiera znak
nowej linii i umieszcza pusty znak na końcu.
Jeśli nie ma błędu, to fgets zwróci wskaźnik, który
jest pierwszym parametrem.
Zwróci wskaźnik, który jest zwracany z funkcji.
A potem to też się dzieje aby wypełnić wskaźnik
str jako pierwszy parametr.
Jeśli wystąpi błąd, zwracana jest wartość null.
A potem przeczytanie końca pliku powoduje, że zwracana jest wartość null, co oznacza,
że czytasz wszystkie swoje ciągi.
Spójrzmy więc na przykład.
Tutaj mamy nasze główne i tworzymy nasz wskaźnik pliku, tworząc
ciąg znaków.
Oto wskazówka, której nie zrobiliśmy Mallokalizuj dla niego dowolne dane, po prostu
tworzymy tablicę znaków.
Otwieramy plik do odczytu, czytanie tylko dlatego, że jest r.
Powiedzieliśmy, że jeśli jest zerowa, wyskocz.
W przeciwnym razie po prostu mówimy fgets, czytamy w 60 znakach.
Lub jeśli wysuw linii jest wcześniej że pojawi się
wysuw wiersza, a następnie wydrukuje go i co jest kiedykolwiek w buforze str.
Więc str jest tym pierwszym postać, która została przekazana.
Następnie zamykamy wskaźnik pliku, ustaw go na null i zwróć zero.
Spójrzmy więc ponownie to wewnątrz naszego kodu blokuje IDE.
Jedyna rzecz, która się w tym zmieniła program to tak naprawdę wiersze od 14 do 17.
Używamy fgets do odczytywania naszego ciągu in, a następnie mamy bufor str.
Musimy więc również utworzyć plik
tablica znaków, która jest naszym str i chcemy, aby zawierała 60.
Czytamy w 60.
Dodamy nowy wiersz, więc tak jest przeczytam w 59, a następnie dodam znak nowego
wiersza na końcu.
Moglibyśmy więc powiedzieć 61.
A potem fgets będą w środku instrukcja if i będzie
czytać w każdym łańcuchu, aż do niej osiągnie 60 znaków lub nową linię i
wydrukuje ten ciąg.
Zauważysz, że tak nie jest chwilę, więc nie
czytamy do końca pliku.
Czytamy koniec plik, otrzymujemy wartość null.
Więc jeśli to zbudujemy, chcemy zrobić na pewno mamy poprawne cytaty.
Zawsze, gdy kopiujesz z programu PowerPoint psuje cytaty.
Chcemy się upewnić stworzyliśmy naszą zmienną c, nie jest używana, to jest
w porządku.
Więc chodźmy dalej i uruchommy to.
A widzisz cześć, to jest Jason.
Więc właściwie przeczytaj w całości wiersz tekstu z pliku.
Przeczytał w pierwszej linii.
Więc nazwałbyś to ponownie i przeczytaj w drugiej linii.
Jeśli zmienisz liczbę bajtów czytać, powiedzmy, że chcemy
przeczytać 10, przeczytalibyśmy za 10, a potem to zwróci te
10 zamiast czytania całej linii.
Więc mamy to po prostu cześć, to ja.
Więc to będzie czytane w liczbie znaków
drugi parametr lub do momentu, gdy otrzyma linię paszy i przechowuje to w str.
Str to tablica znaków.
Drukujemy to fgets.
Fgets to o wiele więcej wydajne do czytania.
Ponieważ nie czytamy znak i naraz
wczytujemy więcej danych.
Czytanie postaci w czas nie jest tak efektywny.
Więc teraz wiemy, jak czytać w singlu znaków, wiemy,
jak czytać w łańcuchach, dopóki nie przeczytają nowego wiersz lub liczbę znaków.
Ale możesz też czytać sformatowane dane wejściowe z pliku.
Mamy więc getc, fgetc, fgets.
A teraz mamy inny funkcja o nazwie fscanf.
To jest sformatowane wejście.
Sformatowane dane wejściowe to określone dane tym samym ma separator lub jest z
nim powiązany określony format.
Ta funkcja fscanf pobiera plik ze strumienia, a następnie format.
Format jest podobny do printf używane specyfikatory formatu.
Więc jeśli chcesz czytać w liczbach całkowitych lub podwaja się, możesz określić
dane wewnątrz wprowadzanego pliku w podwójnych
i będzie to czytać, dopóki nie będzie wyglądać jak scanf dopóki nie zobaczy białego znaku.
Więc pierwszy argument do fscanf funkcja jest wskaźnikiem do obiektu
pliku, który identyfikuje strumień.
Musimy wiedzieć co plik, z którego czytamy.
Drugi argument do funkcja jest formatem.
To jest ciąg c, który zawiera co najmniej jeden z poniższych elementów.
Białe znaki, inne niż białe znaki znak, specyfikatory formatu.
Użycie jest takie samo jak scanf i the w printf, ale zamiast
tego pochodzi z pliku.
Tak więc wewnątrz podwójnych cudzysłowów możesz umieścić w tekście, możesz wstawić białe lub
inne niż białe znaki, ale specyfikatory formatu określają sposób,
w jaki będziesz czytać dane.
Następnie określasz zmienne do którego chcesz to przeczytać.
Więc funkcja zwraca liczba
elementów wejściowych pomyślnie dopasowanych i przypisanych.
Oto jak to wygląda.
Zauważysz, że głównym jest tworzenie trzech tablic znaków, str1, str2 i
str3, po dziesięć bajtów każda.
Tworzymy liczbę całkowitą o nazwie roku trafiliśmy we wskaźnik pliku.
Pierwsza rzecz, którą robimy otwieramy plik.
W tym przypadku otwieramy to do czytania i pisania.
Ale tak naprawdę nie będziemy pisać cokolwiek do tego, po prostu wyświetlimy
to, co z niego czytamy.
Sprawdzamy, czy plik wskaźnik nie jest równy null.
A potem tak naprawdę jesteśmy umieszczając coś w pliku fputs.
Jeszcze o tym nie rozmawialiśmy, ale to coś pisze.
Skoncentruj się tutaj na fscanf.
Fscanf to zrobi odczytać sformatowane dane.
A więc co to zrobi czy będzie
czytany w trzech ciągach oddzielonych spacjami.
Więc widzisz procent jako procent przestrzeni jako procent przestrzeni
s procent przestrzeni d.
Wtedy mówimy, gdzie jesteśmy wczytuje je do naszej tablicy
trzech znaków, a następnie do naszego rok i musimy określić operator
adresu dla naszego roku.
Ale dane są sformatowane w formacie specyficzny sposób, kiedy jest napisany.
A kiedy czytasz coś, to jest sformatowany, musisz zrozumieć
format pliku, jak jest napisany.
Tutaj wiemy, że plik jest zapisany oddzielając ciągi białymi spacjami.
Więc tacy jesteśmy mam zamiar to przeczytać.
I tak możemy to przeczytać w jednym wywołaniu fscanf.
Możemy użyć naszego formularza jako specyfikatorów jako nasz drugi argument, a
następnie zmienna liczba argumentów dla każdego oddziel każdy przecinek, aby określić dane, do
których chcemy je wczytać.
A potem po prostu to drukujemy data, trzy ciągi w roku, a
następnie ponownie zamykamy plik.
A więc są to trzy sposoby możesz wczytać dane z pliku.
Możesz czytać znakami, możesz czytać w łańcuchach lub możesz
czytać sformatowane dane.
Zauważysz sformatowany sposób robienie tego jest bardzo podobne do scanf.
Używasz specyfikatorów formatu, zmienne do wczytania.
Będziemy mieli wyzwanie czytanie danych, które pozwolą ci lepiej się
z tym zapoznać.
To całkiem proste.
Zrobisz swoje połączeń, użyjesz wskaźników
do plików i jedziesz użyć tych trzech funkcji.
Dziękuję Ci.