Zapisywanie/Otwieranie

0

Ok kod już stworzyłem nawet dziala i przy plikach textowych przy któryh
notepad kopie w kalendaż mój kod radzi sobie bardzo dobrze ale jet jedno ale
:-)

1.czy to co ja napisałem jest dobre bo to że działa nie znaczy że jest
dobrze napisane
2.jak ustawić żeby otwierał mój wymyślony format np. *.lom
3.co oznacza "cos:integer" napisałem to bo bez tego nie chce działać ale
chciałbym wiedzieć co ten wpis oznacza a i jedna żecz jaki najlepiej
określić rozmiar bufora
4.co oznacza jedynka przy resecie wyczytałem że chodzi coś o rozmiarze ale nie wiem dokładnie co ?
5. i mniej ważne pytanie zapis Edit1.Text:=FloatTostrF(Koniec,ffNumber,4,9);
wyświetla mi wynik w sekundach czy milisekundach ??

*--------------- Otwieranie -------------------------------------------------
var
start,koniec:real;
Plik : file;
cos : integer;
Buforek: array[1..2048] of Longint;
begin
if Opendialog1.Execute then
begin
start:=Time;
AssignFile(Plik, OpenDialog1.FileName);
Memo1.Lines.LoadFromFile(Opendialog1.FileName);
try
FileMode:=2;
Reset(Plik,1);
repeat
BlockRead(Plik, buforek, SizeOf(buforek),cos);
Koniec:=Time-start;;
Edit1.Text:=FloatTostrF(Koniec,ffNumber,4,9);
until (cos = 0);
finally
closefile(plik);
end;
end;
end;
*-------------------------- koniec ------------------------------------= pozdrawiam Oskar =- (delphi 6 GG:2792614)

0

Hmm cos jest ci potrzebne do zakonczenia pętli, rozszerzenie lom - musisz sam w rejestrze poszukac (jest do tego kod w dziale kodyźródłowe dlephi)

I jeszcze jedno po co ci te assign rewrite itp?????????

0

A do czego to ma sluzyc??

  1. plik deklaruje sie albo jako tekstowy albo jako typowany (file of byte, file of integer), albo jako nietypowany (file - jak u Ciebie). Tekstowe to inna bajka, w typowanym wszystko (wielkosc pliku, liczba danych przeczytanych) jest liczone w takich jednostkach (rekordach) jakie byly zadeklarowane. A plik nietypwany (untyped) nie ma zadeklarowanego rozmiaru rekordu, wiec przy reset trzeba go podac: np 1. wiec nastepujace kody:

var
F : file of byte;
begin
AssignFile(F,'nazwa');
Reset (F);

oraz
var
F: file;
begin
AssignFile(F,'nazwa');
Reset(F,1);

sa praktycznie rownowazne.

  1. procedury BlockRead i BlockWrite maja dwie postaci
    BlockRead(plik, bufor, liczba);
    BlockRead(plik, bufor, liczba, liczbasukces);

wersja pierwsza laduje z pliku do bufora liczbe rekordow. Jesli w pliku bedzie mniej rekordow, program sie wywali.

wersja druga laduje z pliku do bufora liczbe rekordow. Jesli w pliku bedzie mniej rekordow, to zaladuje tyle ile jest. W liczbasukces jest ile sie udalo.

Mozna latwo zrobic procedure kopiowania w nastepujacy sposob

repeat
BlockRead(Plik1, Bufor, SizeOf(Bufor), IleSieUdalo);
BlockWrite(Plik2, Bufor, IleSieUdalo);
until IleSieUdalo=0;

podejrzewam, ze z podobnego programu korzystales piszac swoj program

Wielkosc bufora ustala sie z sensem: duzy zajmuje pamiec, maly zwalnia kopiowanie.

Wracajac do Twojego programu: wydaje sie on nie miec sensu. Przynjamniej dla mnie.

Po pierwsze, DOKAD ma czytac BlockRead. Jesli powtarzasz w petli repeat czytanie do tego samego bufora, to kazdy kolejny odczyt z pliku i zapis do bufora kasuje Ci poprzednia zawartosc bufora.

Jesli chcesz odczytac CALY plik do bufora, to zrob bufor dynamiczny, ustaw jego wielkosc na wielkosc pliku i zaladuj BlockReadem od razu caly plik.

Po drugie, czy z sensem jest pmiar i wyswietlanie czasu ladowania w trakcie ladowania pliku? Nie lepiej zmierzyc ile to trwa w sumie? Jakos tak?

repeat
BlockRead(Plik, buforek, SizeOf(buforek),cos);
until (cos = 0);

Koniec:=Time-start;;
Edit1.Text:=FloatTostrF(Koniec,ffNumber,4,9);

Time podaje czas w ulamkach dnia.

jesli chcesz miec sekundy, daj Edit1Text:=IntToStr(SecondOfTheDay(Koniec));
jesli milisekundy: MilliSecondOfTheDay

--Pawel

Delphi6

0

ee pq ja nie matoł żeby nie wiedzieć co to jest np. assign - ja się tylko pytam jego po co mu jeszcze to : ) a nie do czego to służy :]

uch ty : P

0

ZIOMBER napisał:
ee pq ja nie matoł żeby nie wiedzieć co to jest np. assign - ja się tylko pytam jego po co mu jeszcze to : ) a nie do czego to służy :]
&gt
&gtuch ty : P

ZIOMBER, caly moj tekst jest do sciemy. Ja tez nie wiem, po co mu to. albo LoadFromFile, albo assign itd. Wiem, ze nie jestes matol :-) {hello} --Pawel

Delphi6

1 użytkowników online, w tym zalogowanych: 0, gości: 1