Forum ::BIOTECHNOLOGIA:: Strona Główna ::BIOTECHNOLOGIA::
Forum studentów kierunku biotechnologia Politechniki Śląskiej
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Pseudokurs: Pliki (biblioteka stdio.h)

 
To forum jest zablokowane, nie możesz pisać dodawać ani zmieniać na nim czegokolwiek   Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum ::BIOTECHNOLOGIA:: Strona Główna -> Informatyka
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Michele




Dołączył: 15 Sty 2006
Posty: 1041
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: BioAut, Gleiwitz-Petersdorf

PostWysłany: Czw 21:26, 09 Lis 2006    Temat postu: Pseudokurs: Pliki (biblioteka stdio.h)

wiki napisał:
Plik (ang. file), jest to nazwany ciąg danych (inaczej zbiór danych), o skończonej długości, posiadający szereg atrybutów i stanowiący dla systemu operacyjnego całość.
Czyli jak każdy kto ma komputer wie, że pliki przechowują dane, które zostały wcześniej utworzone za pomocą dowolnego programu utworzone.

Jak do tej pory nasze programy potrafią zrobić to co chcieliśmy. Jednak postawmy sobie pytanie, skąd bierze on dane i gdzie je zestawia? Odpowiedź jest prosta, a mianowicie pobiera dane (zmienne) z klawiatury oraz wyświetla wyniki na ekranie. No dobra, ale pomyśmy sobie, że musimy wprowadzić tysiące danych, które są dostarczone w pliku. Tym właśnie się zajmiemy, czyli komunikacją pomiędzy plikiem, a naszym programem.

Pseudokurs będzie podzielony zatem na dwie części: standardowy (wykorzystanie biblioteki stdio.h) oraz obiektowy (korzystający z strumieni może będzie w przyszłości).

1. Standardowy (bibioteka stdio.h):
Podstawą do komunikacji z plikami jest zmienna, która sama w sobie nie będzie nas interesować. Ważne jest to, aby była odpowiednio zadeklarowana:
Kod:
FILE *nasz_plik;
Zauważmy, że deklaracja zmiennej nasz_plik odbywa się poprzez FILE * pisane dużymi literkami (napisanie małymi spowoduje wystąpienie błędu) oraz zmienna musi być wskaźnikiem!

Dobra, to jak mamy już zadeklarowaną zmienną, która służy do tego, aby komputer wiedział, co to za plik, to zanim coś zaczniemy z naszym plikiem robić, to najpierw musimy go otworzyć, czyli poprostu pokazać komputerowi, który to jest (będzie) plik oraz jakiego będzie typu:
Kod:
nasz_plik=fopen("test.txt","wt");
No dobra, ale co to wogóle robi. Otóż, aby móc komunikować się z jakimkolwiek plikiem musimy najpierw mieć nazwę pliku (my mamy "test.txt") oraz musimy powiedzieć komputerowi do czego będziemy ten plik potrzebować (nasze "wt"). "wt", a co to takiego?No więc już tłumaczę. Korzystając z komputera na codzień wykorzystujemy pliki do następujących potrzeb:
1. Aby móc skorzystać pliku, musimy go najpierw utworzyć (tak jak włączamy edytor dokumentów i klikamy nowy dokument). Powstaje wtedy nowy plik do którego możemy dać nasze dane to jest właśnie nasz parametr "wt" (pochodzi mniej więcej od Write Text mode),czyli będziemy po tym mogli zapisywać tekst do pliku.
2. Otwieramy plik i z niego korzystamy (np. MP3). Takie wykorzystanie służy tylko do pobierania danych z pliku do komputera. Zaletą jest tego, to, że cennych danych przypadkiem nie skasujemy. W naszej deklaracji zastosujemy "rt" (pochodzi mniej więcej od Read Text mode, ale nie wiem). Użycie tego parametru na pliku istniejący usunie całą zawartość danego pliku!
3. Najczęściej się zdarza, że np. piszemy prace w edytorze tekstowym. Zapisujemy, wychodzimy. Następnie w przyszłości chcemy kontynuować pisanie naszej pracy. Jednak powyższe dwa rozwiązania nie są dla nas odpowiednie, ponieważ, albo otworzymy bez możliwości dopisania, albo skasujemy to co już napisaliśmy. Z pomocą nam przychodzi parametr "a", (pochodzi od append - dołączać).

Zapisywanie do plików odbywa się podobnie jak przy wypisywaniu na ekran za pomocą printf. Różni się to tylko dwoma elementami:
Kod:
fprintf(nasz_plik,"to_mój_pierwszy_plik!");

a mianowicie poleceniem wywołane to fprintf, oraz tym, że jak otworzymy nawias, to zaraz po nim musimy wpisać naszą zmienną, która odnosi się do naszego pliku. Gdy chcemy dać jakąś wartość do pliku, to robimy tak samo jak przy
Kod:
fprintf(nasz_plik,"Wartość %f",liczba);
.

Czytanie jest tak samo jak przy scanf, z tymi jednak różnicami, że wywołuje je polecenie fscanf oraz po nawiawie musimy napisać zmienną naszą do pliku:
Kod:
fscanf(nasz_plik,"%s", &napis);
.
No dobra, umiemy zapisywać i czytać, ale to nie wszystko, bo po skończonych operacjach na pliku musimy go zamknąć poleceniem
Kod:
fclose(nasz_plik);


Teraz, aby było jaśniej oto dwa kody programu naszego:
Do utworzenia pliku:
Kod:
#include <stdio.h>
#include <stdlib.h>

FILE *nasz_plik;

int main()
{     nasz_plik=fopen("test.txt","wt");
      fprintf(nasz_plik,"to mój pierwszy plik!");
      fclose(nasz_plik);
      system("PAUSE");
      return 0;
}
oraz do czytania:
Kod:
#include <stdio.h>
#include <stdlib.h>

FILE *nasz_plik;

char napis[20];

int main()
{     nasz_plik=fopen("test.txt","rt");
      fscanf(nasz_plik,"%s", &napis);
      printf("co przeczytałem: %s",napis);
      fclose(nasz_plik);
      system("PAUSE");
      return 0;
}
Zapewne Cię zdziwiła deklaracja char napis[20];. Jak wiemy deklarowanie zmiennej char to jest deklaracja jednego znaku. Więc aby móc mieć więcej znaków poprostu utworzyłem tablicę 20 elementową typu znaku, tzn. że zmienna napis będzie mogła mieć maksymalnie 20liter, bo każdy element jest jedną literą. Druga sprawa to %s. Różni się od %c tym, że c - przeczyta do pierwszej spacji, natomiast s, czyta do końca linii.

A co się stanie, czy spróbujemy czytać z pliku, który nie istnieje - sprawdźcie sami Cool Wyskakuje błąd i mamy po programie. Dlatego każdy kto uczy się programować musi założyć głupotę użytkownika i poprostu zabezpieczyć się przed nim. Na wykładzie został podany przykład:
Kod:
if ((we=fopen("Dane","rt"))==NULL) {fprintf(stderr,"Nie ma takiego pliku");return 1;}
Jednak tutaj warto, przed return dodać sobie system("PAUSE");, aby zdążyć przeczytać komunikat. Druga sprawa Adam, tutaj właśnie mamy if'a w którym przypisujemy oraz sprawdzamy. Nie wiem, czy to zauważyłeś. Trzecia sprawa, to taka, że zmienna (stała) stderr jest odwołaniem do urządzenia, które jest komunikacją z użytkownikiem (w naszym przypadku monitor, ale nie musi on być). Dlatego ja polecam używać i nie męczyć się w to niezrozumiałe elementy:
Kod:
nasz_plik=fopen("test.txt","rt");
if (nasz_plik==NULL)
 {
  printf("Plik nie istnieje.\n");
  system("PAUSE");
  return 1;
 }
To nie wszystko, ponieważ operacje na plikach możemy wykonywać takie, o których nawet pojęcia nie mamy. Będę o nich pisał, jak będzie taka potrzeba. Dla zainteresowanych polecam: [link widoczny dla zalogowanych]

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
To forum jest zablokowane, nie możesz pisać dodawać ani zmieniać na nim czegokolwiek   Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum ::BIOTECHNOLOGIA:: Strona Główna -> Informatyka Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin