14 (261)











PTiK - Porady, Tipsy i Kursy
defaultStatus="Visual C++";










Lekcja
14 - Kurs Visual C++ by SLASH







Dziś nauczymy się odczytywać pliki. Od razu zabieramy się do roboty - nasz
program ma wyglądać tak:

Elementy aplikacji:


Przycisk
IDC_ZAPISZ
Caption: &Zapisz


Przycisk
IDC_DOPISZ
Caption: &Dopisz


Przycisk
IDC_ODCZYT
Caption: &Odczytaj


TextBox
IDC_POLETEKST
Multiline włączone


Teraz musimy stworzyć zmienną dla textbox-a. Niech to będzie m_tekst. Skoro
mamy już załatwione "formalne" sprawy możemy się wziąść za
oprogramowywanie przycisków - na pierwszy "odstrzał" idzie przycisk
Zapisz:
FILE *plik;
UpdateData(TRUE);
plik = fopen("C:\\test.txt","w");
fputs(m_tekst, plik); 
fclose (plik);
Taki krótki listing potrafi zapisać do pliku. Uruchom swój program i wpisz
w pole Linia 1 - teraz naciśnijj Ctrl + Enter by znaleźć się linijkę niżej
(tą opcję dało nam włączenie funkcji multiline dla textbox-a). Napisz
linijka 2 - znów przejdź niżej i napisz linijka 3 - kliknij zapisz. Twój
plik został utworzony bezpośrednio na dysku C: - podejrzyj go - powinien wyglądać
tak:
Linia 1
Linia 2
Linia 3
Teraz wyjaśniam jak to zadziałało. Po pierwsze utworzyliśmy wskaźnik dla
pliku (*) - wiadomo, że do zmiennej nie można zapisać pliku, bo po co skoro
można zrobić wskaźnik. Potem odświeżyliśmy dane w celu pobrania danych z
pola tekstowego. Następną rzeczą było otworzenie pliku. Poniżej opisuję
jak można otwierać plik. Potem zapisaliśmy do niego zawartość pola
tekstowego i zamknęliśmy ten plik.
Teraz wyjaśniam funkcję fopen:
plik = fopen(ścieżka,tryb)
zmienna plik jest to wskaźnik do pliku - deklarowaliśmy go w przykładzie.
Ścieżka to chyba wiadomo :) . A to "w" ? W C++ mam 3 podstawowe
tryby:
w - write (czyli zapis - wszelkie dane znajdujące się w pliku zostają
zamazane, jeśli plik nie istnieje to zostanie utworzony)
a - append (czyli dopis - dane zostają dopisane do pliku, wo co się w nim
znajdowało zostanie nienaruszone, jeśli plik nie istnieje to zostanie
utworzony"
r - read (czyli odczyt - daje więc możliwość czytania, nie można w ten
sposób uszkodzić jakiegokolwiek pliku !)
Aby dane zostały zachowane należy plik zamknąć funkcją fclose(plik)
Jak zauważyłem do pliku zapisujemy komendą fputs - jeśli chcemy zapisać
dwie linijki należy to zrobić to zrobić tak:
fputs ("Linijka1\n",plik);
fputs ("Linijka 2\n",plik);
Nie zapomnij o stosowaniu przełącznika \n który przenosi nas do następnej
linii - bo jeśli by tego nie było to by nasz plik wyglądał tak:
Linijka 1Linijka 2
A teraz wygląda tak:
Linijka 1
Linijka 2
Jeśli nasze dane leżą w zmiennych to można to zapisać tak:
fputs (tablica[0], plik);
for (int x=1; x<tablica.GetUpperBound(); x++)
{
if (tablica[x] == "")
{
break;
}
fputs ("\n" + tablica[x], plik);
}
fclose(plik);
Pewnie zastanawiasz się dlaczego tablica[0] została zapisana poza pętlą. 
Zauważ, że w pętli najpierw robimy nową linię a potem zapisujemy - a wię
nie możemy sobie na samym początku zrobić nową linię bo zrobi to małe
zamieszanie. To idźmy dalej - dlaczego daliśmy \n na początku ? Ano dlatego,
że jakby było na końcu to znów na końcu pliku stworzylibyśmy pustą linię
- to wyjście jest poprawne jeśli nasza tablica nie jest pusta - inaczej
musielibyśmy sprawdzić tablicę przed zapisem.
No dobra, weźmy się za odczyt
W rzeczywistości istnieją jeszcze inne tryby o których może powiemy sobie
w przyszłości - jest to zapis binarny. Ale skupmy się na naszym programie -
skoro umie zapisywać to by się i odczyt przydał - a więc do przycisku
Odczytaj dodajemy kod:
FILE *plik;
char linia[100];
CString wynik;

if ((plik = fopen("c:\\test.txt","r")) != NULL)    // Sprawdzamy
czy plik istnieje
{
while(fgets(linia,100,plik) != NULL)       
// Dopóki plik nie skończy się pobierz linię
{
wynik.Format("%s",linia);               
// Formatujemy
MessageBox(wynik);                 
// Wyświetlamy wynik
}
fclose(plik);           
// Zamykamy plik

}
else               
// A jeśli plik nie istnieje...
{
MessageBox("Plik nie istnieje");
}
Ważne jest to, że z pliku nie pobieramy stringów tylko ciągi znaków (char)
i muszą one mieć stałą wartość - czyli deklarujemy je tak:
char zmienna[liczba]
Teraz przyjrzyjmy się funkcji pobierającej linijkę z pliku - wygląda ona
tak:
fgets(linia, 100, plik)
I co my tu widzimy ? Pierwszym argumentem jest zmienna char do której
zostanie zapisany ciąg, następnie mamy liczbę całkowitą określającą
maksymalną liczbę znaków w ciągu, a następnie wskaźnik do pliku.
Uruchom swój program do testu i naciśnij przycisk "Odczytaj".
Powinny wyskoczyć 3 okienka z kolejnymi liniami.
Teraz jeszcze trzeba oprogramować przycisk dopisz - wyglądać to będzie
tak:
FILE *plik;
UpdateData(TRUE);
plik = fopen("C:\\test.txt","a");
fputs("\n" + m_tekst, plik); 
fclose (plik);
Funkcja wygląda prawie identycznie jak zapisz, ale z dwoma wyjątkami. Po
pierwsze zamiast "w" daliśmy "a", i dodaliśmy jeszcze przełącznik
nowej linii, gdyż bez tego linie nam by się pokrywały i wyszło by coś w
stylu:
Linia 1
Linia 2
Linia 3inia 4
Linia 5
Linia 6
I to by było chyba na tyle jeśli chodzi o zapis i odczyt - mam nadzieję,
że to zrozumiałeś...

Pamiętaj
! Jeśli masz jakikolwiek problem ze zrozumieniem tego kursu to napisz do mnie -
na każdego maila odpisuję chętnie. Także wszelkie opinie, zażalenia itp.
kieruj na mój adres - chcę wiedzieć czy ten kurs Wam się podoba czy też nie

Adres - slash@ptik.prv.pl




Wyszukiwarka

Podobne podstrony:
Biblia (Ks Hioba 261 14)
T 14
Rzym 5 w 12,14 CZY WIERZYSZ EWOLUCJI
ustawa o umowach miedzynarodowych 14 00
990425 14
foto (14)
DGP 14 rachunkowosc i audyt
Plakat WEGLINIEC Odjazdy wazny od 14 04 27 do 14 06 14
022 14 (2)
index 14
Program wykładu Fizyka II 14 15

więcej podobnych podstron