zapisywanie tekstu

0

mam dwie procedurki

var
f : file;
stream : Tmemorystream;

odczyt

memo1.lines.clear;
assignfile(f,'opek.dto');
reset(f,1);
stream.Position := 0;
blockread(f,stream,1);
memo1.lines.LoadFromStream(stream);
closefile(f);

zapis
assignfile(f,'opek.dto');
Rewrite(F,1);
memo1.lines.SaveToStream(stream);
blockwrite(f,stream,1);
closefile(f);

form1oncreate
stream := tmemorystream.create;

form1onclose
stream.free;

teraz pytanie - co w tym jest źle??
Nie chce mi odczytać tekstu.... a moze nawet źle zapisuje

wiem ze lepiej by było napisac stream.savetofile ale ja wole tak :)

0

Po pierwsze w BlockRead ostatni parametr ma być typu var. Czyli ma być zmienną, a nie stałą = 1. Po drugie drugi parametr to bufor, jakiś typ zmiennej, a nie cały obiekt TMemoryStream. Radzę jednak użycie tego LoadFromStream i SaveToStream--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

kurde a jak by kto napisał to ?
mam tu też stary sposób (kiedyś też to probowalem)

var
plik, output : File;
buff : byte;
buff_string : array of string;
data : byte;

zapis
var
i : integer;
begin
setlength(buff_string,1);
AssignFile(Plik,'opek.dto');
Reset(Plik,1);
seek(Plik,1);
buff := memo1.lines.count - 1;
BlockWrite(Plik,buff,0);
for i:=2 to memo1.lines.count - 1 do
begin
buff_string[0] := memo1.lines[i];
BlockWrite(Plik,buff_string[0],i);
end;
CloseFile(Plik);
end;

odczyt

var
i : integer;
begin
memo1.lines.clear;
AssignFile(Plik,'opek.dto');
setlength(buff_string,sizeof(plik));
Reset(Plik,1);
Seek(plik,0);
Blockread(Plik,buff,0);
showmessage(inttostr(buff));
for i:=2 to buff do
begin
Blockread(Plik,buff_string[0],i);
showmessage(buff_string[0]);
memo1.lines.add(buff_string[0]);
end;
CloseFile(Plik);
end;

0

I z tym 0 w BlockRead działa?--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

cholera wie czy działa? :P

0

pq kiedyś mi obiecał, że mi napisze (gdy będzie miał czas) :]]]]]

0

ZIOMBER napisał:
cholera wie czy działa? :P

To sprawdź. Jak na mój gust to powinno wywalić błąd jeszcze przed uruchomieniem.--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

Powiem, krótko to nie wywala tego błędu co ty masz na myśli :]

0

Czuje sie wywolany do tablicy...

Powiedz jeszcze, czy to musi byc przez stream?--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Nie to nie musi byc przez stream! tylko zeby zostało zapisane poprzez blockwrite a odczytane przez blockread :] czy jakoś tak...

0

Przerob to sobie na swoje funcje, ja napisalem na buttony zeby sie latwiej sprawdzalo

procedure TForm1.Button1Click(Sender: TObject); *Zapisz
var
Buffer : string;
F : file;
begin
AssignFile(F,'c:\windows\desktop\x.z');
Rewrite(F, 1);
SetLength(Buffer, Length(Memo1.Text));
Buffer:=Memo1.Text;
BlockWrite(F,Buffer[1],Length(Buffer));
CloseFile(F);
end;

procedure TForm1.Button2Click(Sender: TObject); *Odczytaj
var
Buffer : string;
F : file;
begin
AssignFile(F,'c:\windows\desktop\x.z');
Reset(F, 1);
SetLength(Buffer, FileSize(F));
BlockRead(F,Buffer[1],FileSize(F));
Memo1.Text:=Buffer;
CloseFile(F);
end;
--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

Nom dzięki wielkie :)

Ale szkoda że zajmuje to tyle samo co normalny plik txt :]

W moich innych zapisach to byle jaki tekst zajmował 4 kb :)

Jeszcze jedno pytanie - nie znasz moze jakis specjalnych metod kompresji bufora :))))) co??

0

ZIOMBER napisał:

&gtJeszcze jedno pytanie - nie znasz moze jakis specjalnych metod kompresji bufora :))))) co??

Nie znam, ale na pewno w necie znajdziesz duzo o kompresji...--Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

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