
XazaX [ Chor��y ]
Noobowskie pytanie dotyczace Pascala ;)
Mam taki oto programik:
program Operacje_na_plikach;
uses crt;
$I-
const
____ plik:string='ksiazki.txt';
type
____ksiazka=record
__________________autor:string;
__________________tytul:string;
__________________rokwyd:word;
____end;
var
__ ksx:ksiazka;
__ dane:file of ksiazka;
procedure wczytaj(var ks1:ksiazka);
__________begin
______________ with ks1 do
______________ begin
____________________write('Podaj Autora ksiazki: ');
____________________readln(autor);
____________________write('Podaj tytul ksiazki: ');
____________________readln(tytul);
____________________write('Podaj rok wydania ksiazki: ');
____________________readln(rokwyd);
______________ end;
__________end;
procedure wypisz(ks1:ksiazka);
__________begin
______________ writeln(' ');
______________ writeln('************************');
______________ writeln('Autor: ',ks1.autor);
______________ writeln('Tytul: ',ks1.tytul);
______________ writeln('Rok wydania: ',ks1.rokwyd);
__________end;
procedure zapiszDoPliku(ks1:ksiazka);
__________begin
______________ assign(dane,plik);
______________ rewrite(dane);
______________ write(dane,ks1);
______________ close(dane);
__________end;
procedure dopiszDoPliku(ks1:ksiazka);
__________begin
______________ assign(dane,plik);
______________ reset(dane);
______________ seek(dane,filesize(dane));
______________ writeln('Numer wskaznika: ',filesize(dane));
______________ wczytaj(ks1);
______________ write(dane,ks1);
______________ close(dane);
__________end;
procedure czytajZpliku(var ks1:ksiazka);
var
__ i:integer;
__________begin
______________ assign(dane,plik);
______________ reset(dane);
______________ for i:=1 to filesize(dane) do
______________ begin
______________ wypisz(ks1); <-------- Tu cos nie gra
______________ end;
______________ close(dane);
__________end;
procedure wypiszPlik;
__________begin
__________end;
begin
wczytaj(ksx);
wypisz(ksx);
zapiszDoPliku(ksx);
writeln(' ');
writeln('************************');
dopiszDoPliku(ksx);
czytajZpliku(ksx);
wypiszplik;
readkey;
end.
Chodzi o to, ze w zaznaczonym przeze mnie miejscu procedura ma wyrzucac na ekran zapisane wczesniej w pliku dane o ksiazkach (z pierwszego i drugiego rekordu, a w tym momencie wypisuje tylko z pierwszego dwa razy:/) . Wczytywanie, zapisywanie i dopisywanie dzialaja elegancko, ale za cholere nie moge tej piepszonej petli zrobic :P
Pomoze ktos? :)
XazaX [ Chor��y ]
up
GBreal.II [ floydian ]
hmm... Wydaje mi sie, ze kazesz wypisac ta ksiazke, ktora podales jako argument funkcji, zamiast czytac z pliku (chyba, ze cos przeoczylem). Nigdzie nie widze, zebys odczytywal w tej procedurze dane z pliku.
XazaX [ Chor��y ]
Wlasnie dlatego nie wiem jak to zrobic :( Zwyklym write'm zapisuje mi w petli 2x to samo co podaje za pierwszym razem :/
W takim razie jak to bedzie wygladac? Po wylaczeniu tej procedury z ciala glownego programu do pliku zapisywane sa dane z procedury zapiszDoPliku i dopiszDoPliku, wiec wszystko gra, tylko ten glupi odczyt, poprostu przyznam sie bez bicia, ze nie wiem jak to zrobic :/
GBreal.II [ floydian ]
dopisz sobie do tej procedury zmienna temp:ksiazka.
w petli, ktora masz przed "wypisz" dodaj read(dane,temp);
Zamiast wypisz(ks1) daj wypisz(temp)
Zobacz, czy bedzie dzialac. Z Pascalem nie mialem do czynienia od jakiegos roku, wiec moglem cos pomieszac :)

XazaX [ Chor��y ]
Dziala :) Dzieki wielkie za pomoc! :)
GBreal.II [ floydian ]
Acha - i teraz niepotrzebne sa zadne parametry w tej funkcji, bo z tekgo ks1 nigdzie nie korzystasz.
XazaX [ Chor��y ]
To widze ze zrobilem to, nie w tej procedurze co mialo byc, tam nizej jest wypiszPlik ;) Tylko za cholere sobie teraz nie przypomne do czego miala byc czytajZpliku ;) Nic to wazne, ze do tej pory wszystko dziala i ze napisalem to (prawie) samodzielnie :)
Jeszcze raz wielkie dzieki :)