Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Off topic (https://forum.cdrinfo.pl/f5/)
-   -   Pascal - małe pytanie: rekordy (https://forum.cdrinfo.pl/f5/pascal-male-pytanie-rekordy-68096/)

Patrix 22.10.2006 23:14

Chmm zamysł z filozofia działania mialem mniej wiecej dobry wg Twojego :D
Z charami kombinowałem problem u mnie był bodaj z tym /while not eof/ bo to mi dalej nie działa, przepisałem Twojego /for/ i teraz wszystko gra :)


poprawione:

Kod:

//--------------------------------------------------------------------
procedure przepisz;
 var    tmp:            file of char;
        plik:          file of char;
        znak:          char;
        i:                integer;


        begin
                assign(tmp,'filmy.tmp');
                assign(plik,'filmy.txt');

                reset(tmp);
                reset(plik);
                seek(plik,filesize(plik));

                for i:=0 to filesize(tmp)-1 do
                        begin
                                read(tmp,znak);
                                write(plik,znak);
                        end;

                close(tmp);
                close(plik);


        end;
//--------------------------------------------------------------------

Jutro jeszcze pomyśle dlaczego mi ten while nie idzie...

Dzieki :)

sobrus 22.10.2006 22:52

Tak mnie to zaciekawilo ze az delphi zainstalowalem...napisalem takie cos i chodzi bez zajakniecia (z while not eof tez). Oczywiscie pominalem sprawdzanie bledow.
(Delphi7 Personal):
Kod:

procedure append;
var plik1,plik2: file of char;
    i:integer;
    znak:char;
begin
  Assign(plik1,'C:\plik1.txt');
  Assign(plik2,'C:\plik2.txt');
  Reset(plik1);
  Reset(plik2);
  Seek(plik2,FileSize(plik2));
  for i:=0 to FileSize(plik1)-1 do
  begin
    Read(plik1,znak);
    Write(plik2,znak);
  end;
  Close(plik1);
  Close(plik2);
end;


andy 22.10.2006 22:05

Mo***380;e co***347; Ci si***281; przyda:
http://4programmers.net/Turbo_Pascal...%B3w_w_Pascalu
http://4programmers.net/Turbo_Pascal/Pliki

Patrix 22.10.2006 21:57

Error: Type mismatch ||
echh jutro belfra pom***281;cz***281;

sobrus 22.10.2006 21:50

wynika z tego ze text to nie file ... :/
a jak dasz oba na "file of char"?

Patrix 22.10.2006 21:30

no w***322;a***347;nie teraz nie krzyczy, poprostu nie przepisuje

jak dam oba na text; to wywala byka:
Error: Incopatible type of arg no. 1: Got text, expected file.

sobrus 22.10.2006 21:24

wlasnie - typ drugiego pliku. oba chyba powinny byc text. W tym wypadku kompilator oczekuje ze bedziesz zapisywac wartosc typu film_r, a ty przepisujesz char.
btw a kompilator nic nie krzyczy?
"char variable expected" czy cos w tym stylu?

Patrix 22.10.2006 21:17

no w***322;a***347;nie narazie nie mam poj***281;cia jak to ma nawet wygl***261;da***263;.

@REi
piszesz o typie "tmp:file of...;" ?

@sobrus
tak owszem tylko niech to cho***263; w jakiej***347; jednej kombinacji zadzia***322;a to to posprz***261;tam :)

sobrus 22.10.2006 21:05

a dlaczego dla kazdego jednego bajtu pliku wejsciowego otwierac i zamykac plik wyjsciowy? lepiej zrobic to raz przed petla.

REi 22.10.2006 20:44

czy tmp nie powinno byc zmienna plikowa? o.0 dawno pascalem sie nie bawilem :D

Patrix 22.10.2006 15:46

Chmm a kto mi wytłumaczy co tu jest źle...
Miałem tutaj zamiar skopiować zawartość tymczasowego pliku 'filmy.tmp' do 'filmy.txt' nie nadpisujac tego drugiego (poprostu dopisać)...


Kod:

//--------------------------------------------------------------------
procedure przepisz;
 var    tmp:            text;
        plik:          file of film_r;
        znak:          char;

        begin
                assign(tmp,'filmy.tmp');
                reset(tmp);

                while not eof(tmp) do
                        begin
                          read(tmp,znak);

                                assign(plik,'filmy.txt');
                                reset(plik);
                                seek(plik,filesize(plik));

                                write(znak);

                                close(plik);
                        end;
                close(tmp);
        end;
//--------------------------------------------------------------------


Patrix 21.10.2006 12:20

taa wiem goto jest złe właśnie dlatego pozbyłem sie go tylko zapomnialem labele wyciac :)

znalazłem jakiś super wypasiony program i ma w skrypcie wszystkie informacje jakie mi potrzeba, ma coś koło ~400 linijek ale go sobie przerobię ;)

luminat 21.10.2006 06:28

program baza_filmow;
uses crt,dos;
type film=record
tytul: string[20];
gatunek: string[15];
rok: integer;
cena: integer;
czas: integer;
end;

var i,j: byte;
x1,y1,j1: byte;
klawisz: char;
baza: film;
plik: file of film;
plik2: file of film;
nazwa_pliku: string[12];
nazwa: string[12];
f: SearchRec;

procedure opcja5;
var nr_rekordu: byte;
i: byte;
baza2: film;

begin
clrscr;
wersja_programu;
textbackground(0);
textcolor(7);
gotoxy(1,1);

assign(plik,nazwa_pliku);


reset(plik);


write('Wprowad***171; nr rekordu kt˘ry chcesz zmodyfikowa***8224; ([0] - wyj***732;cie): ');
readln(nr_rekordu);
if (nr_rekordu<=filesize(plik)) and (nr_rekordu>0) then
begin
seek(plik,nr_rekordu-1);
read(plik,baza);
seek(plik,nr_rekordu-1);
writeln;
writeln('[000] - wybrana pozycja nie zostanie zmodyfikowana');
writeln;


writeln('Tytul: ',baza.tytul);
write('Nowy tytul: ');
readln(baza2.tytul);
if baza2.tytul<>'000' then
baza.tytul:=baza2.tytul;
writeln;

writeln('Gatunek: ',baza.gatunek);
write('Nowy gatunek: ');
readln(baza2.gatunek);
if baza2.gatunek<>'000' then
baza.gatunek:=baza2.gatunek;
writeln;

writeln('Rok: ',baza.rok,' r');
write('Nowy rok: ');
readln(baza2.rok);
if baza2.rok<>000 then
baza.rok:=baza2.rok;
writeln;

writeln('Cena: ',baza.cena,' PLN');
write('Nowa cena: ');
readln(baza2.cena);
if baza2.cena<>000 then
baza.cena:=baza2.cena;
writeln;

writeln('Czas: ',baza.czas,' min');
write('Nowy czas: ');
readln(baza2.czas);
if baza2.czas<>000 then
baza.czas:=baza2.czas;
write(plik,baza);
writeln;
end;
if (nr_rekordu<>0) and ((nr_rekordu>filesize(plik)) or (nr_rekordu<0)) then
begin
writeln;
write('Baza jest pusta lub podano nr rekordu kt˘ry nie istnieje!!!');
readln;
end;
close(plik);
end;

Sensownie mozna zrobic m. in tak jak wkleilem. Jest to wycinek bazy, ktora robilem jakis czas temu. Jak bedziesz zainteresowany to moge udostepnic cala baze, ale zeby zrozumiec jej schemat dzialania bedziesz musial poswiecic troche czasu. I wystrzegaj sie uzywania instrukcji goto, instrukcja bezwarunkowa jest to najgorsza rzecz jaka moze zrobic programista w swoim programie.

Patrix 20.10.2006 21:27

Pascal - małe pytanie: rekordy
 
Ilość załączników: 1
Więc tak, napisałem program w pascalu i to miały być jego zadania:
- pytać/zapisać do pliku imie/nazwisko/klasa jako rekordy
- aktualizacja rekordu

Menu miało być takie:
1. dodaj ucznia
2. aktualizacja
3. wyjscie


W sumie nawet działa pomijajac ta aktualizacje (niebardzo wiem jak sie za to zabrać). Program może i nie jest na wysokim poziomie (moze być beznadzieja dla niektorych :D) no ale tak to wyglada jakos po miesiacu siedzenia w tym.

Wiec podpowie ktos jak sensownie aktualizaować wyszukany rekord ?

PS
PseudoProgram w załaczniku :)


PS2 label'ami w varze sie nie przejmowac zapomnialem zastosować na nich del bo udało mi sie uniknąć goto...


Wszystkie czasy w strefie CET. Aktualna godzina: 09:55.

Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.