Dinamik array kullanmak

Başlatan bunalmis, 11 Haziran 2007, 21:18:52

z

Diskte 5 Mbyte kadar uzun text dosyalarim var. Delphide bunlari okuyup  array icine atmak istiyorum. Verilerle isim bittiginde ise arrayi hafizada yer kaplamamasi acisindan yok etmek istiyorum.

Bu is icin basit bir ornek verebilirmisiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Getmem ve Freemem ile olur.

Google da "dynamic array delphi" diye aratınca örnek çıkıyor.

z

Delphinin kendi orneklerinde Allocmem komutu ile yapilmis bir uygulama var.

Bunu programimda aynen kullandim. Diskten dosyayi allocmem ile acilmis alana da okuyorum. Ancak Array'e erismek istedigimde su meshur EAccess Violation mesajini aliyorum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Ahmakligima doymayayim.

Dosyayi buffer icine okurken Buffer^ yazmak yerine Buffer yazmisim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

files

Memle arrayle filan uğraşmana gerek yok.

Tmemorystream, tfilestream....muhtemelen bunları hiç kullanmamış sın.

Tavsie ederim. çok faydalı birşeydir. Baştan biraz zor görünsede  okuma-yazma için idealdir.

var t: tmemorystream;
b:byte;
p:pbyte; //byte gösteren pointer
begin
p:=@b;

t:= tfilestream.create;
t.loadfromfile('senindosya.uzn');
t.position:= istediginpos;
t.readBuffer(p^,1);  //1 bayt okudun. bye atadın
// işin bittiyse
t.free;  //ile memorystreami boşaltırsın
end;


http://dn.codegear.com/article/26416

webteki örneklerin bazısında yazım hatası olabilir.

SpeedyX

Evet, ben dinamik dizi görünce direkt ona cevap vermiştim. tfilestream ile daha rahat olur. Sonuçta arkada aynı işler yapılıyordur ama daha kısa kod yazıyorsun. Kullanımı aspdeki fso ya benziyor.
Mesela aynı metodla dosya kopyalayan bir procedure
procedure FileCopy(const SourceFileName, TargetFileName: string );
var
  S, T: TFileStream;
begin
  S := TFileStream.Create(sourcefilename, fmOpenRead );
  try
    T := TFileStream.Create(targetfilename, fmOpenWrite or fmCreate);
   try
     T.CopyFrom(S, S.Size ) ;
   finally
     T.Free;
   end;
  finally
   S.Free;
  end;
end;