Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Hızlı satır okuma bu fonksiyonu çalıştıramadım satır okuma fonksiyonu
#1
Bu kodu bir çin sitesinden buldum ama derlerken hata veriyor Delphi 7 kullanıyorum yardımcı olurmusunuz.

function EnterFile(const FileName:string):TInt64Array;
var
 MyFile:TMemoryStream;
 rArray:TInt64Array;     
 size,curIndex:int64;
 enterCount:int64;
 DoLoop:Boolean;
 pc: PChar;
 arrayCount:int64;
 addStep:integer;
begin
 if fileName = '' then
   Exit;
 if not FileExists(fileName) then
   Exit;
 MyFile:=TMemoryStream.Create;
 MyFile.LoadFromFile(fileName);
 size:=MyFile.Size;
 pc:=MyFile.Memory;
 curIndex:=RowLeast;
 DoLoop:=true;
 enterCount:=0;
 setlength(rArray,perArray);
 arrayCount:=perArray;
 enterCount:=0;
 rArray[enterCount]:=0;
 while DoLoop do
 begin
   addStep:=0;
   if (ord(pc[curIndex])=13) then
     addStep:=2;
   if (ord(pc[curIndex])=10) then
     addStep:=1;
   if (addStep<>0) then
   begin
     Application.ProcessMessages;
     inc(enterCount);
     if (enterCount mod perArray=0) then
     begin
       arrayCount:=arrayCount+perArray;
       setlength(rArray,arrayCount);
     end;
     rArray[enterCount]:=curIndex+addStep;
     curIndex:=curIndex+addStep+RowLeast;
   end
   else
     curIndex:=curIndex+2;
   if curIndex> size then
     DoLoop:=false
   else
     DoLoop:=true;
 end;
 result:=rArray;
 freeandnil(MyFile);
end;
Cevapla
#2
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu kodu bir çin sitesinden buldum ama derlerken hata veriyor Delphi 7 kullanıyorum yardımcı olurmusunuz.

function EnterFile(const FileName:string):TInt64Array;
var
 MyFile:TMemoryStream;
 rArray:TInt64Array;     
 size,curIndex:int64;
 enterCount:int64;
 DoLoop:Boolean;
 pc: PChar;
 arrayCount:int64;
 addStep:integer;
begin
 if fileName = '' then
   Exit;
 if not FileExists(fileName) then
   Exit;
 MyFile:=TMemoryStream.Create;
 MyFile.LoadFromFile(fileName);
 size:=MyFile.Size;
 pc:=MyFile.Memory;
 curIndex:=RowLeast;
 DoLoop:=true;
 enterCount:=0;
 setlength(rArray,perArray);
 arrayCount:=perArray;
 enterCount:=0;
 rArray[enterCount]:=0;
 while DoLoop do
 begin
   addStep:=0;
   if (ord(pc[curIndex])=13) then
     addStep:=2;
   if (ord(pc[curIndex])=10) then
     addStep:=1;
   if (addStep<>0) then
   begin
     Application.ProcessMessages;
     inc(enterCount);
     if (enterCount mod perArray=0) then
     begin
       arrayCount:=arrayCount+perArray;
       setlength(rArray,arrayCount);
     end;
     rArray[enterCount]:=curIndex+addStep;
     curIndex:=curIndex+addStep+RowLeast;
   end
   else
     curIndex:=curIndex+2;
   if curIndex> size then
     DoLoop:=false
   else
     DoLoop:=true;
 end;
 result:=rArray;
 freeandnil(MyFile);
end;

Merhaba,

Int64 ü LongInt olarak değiştirip deneyebilir misin?
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#3
(08-07-2017, Saat: 11:45)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlInt64 ü LongInt olarak değiştirdim bu defa 
setlength(rArray,perArray);
ve 
curIndex:=RowLeast;
bu satılarda hata verdi
Cevapla
#4
Kopyala / yapıştırı eksik yapmış yapmışsın. Kodu aldığın linki gönder oradan bakayım.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
(08-07-2017, Saat: 12:54)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Oleksik almadım bu linkte orjinal kod : Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#6
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu kodu bir çin sitesinden buldum ama derlerken hata veriyor Delphi 7 kullanıyorum yardımcı olurmusunuz.


Compile aşamasında döndürdüğü hatayı paylaşabilir misiniz? Belki de gerekli kütüphanelerden bazılarını eklemeyi unutmuş olabilirsiniz.



procedure TMainForm.btn2Click(Sender: TObject);
var
  datasIndex:TInt64Array;//数据文件索引
begin
 
  t1:=GetTickCount;
  datasIndex:=ScanEnterFile('R:\201201_dataFile.txt');
  Caption:=Caption+'::'+inttostr(GetTickCount-t1); 
end;

Asıl kullanımı burada gerçekleştiriyor. Siteden pek bir şey anlamadım ama yarım bir çince-ingilizce çevirisi ile Delphi'de hızlı veri taraması yapabilmek için ihtiyaç duymuş. Kullanacağınız asıl fonksiyon ScanEnterFile olacak.

TInt64Array ve Int64'ün bazı sistemsel değişiklikleri AnsiString ve türevlerinin değişikliği ile aynı sürümde yapıldı. Belki de sorununuz Delphi 7 ile ilgilidir. Daha yüksek bir versiyonda denemenizi öneririm. Dilerseniz talebinizi iletin, belki farklı çözümler bulunabilir. İyi günler.
{ talk is cheap show me the code. }
Cevapla
#7
(08-07-2017, Saat: 13:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBu kodu bir çin sitesinden buldum ama derlerken hata veriyor Delphi 7 kullanıyorum yardımcı olurmusunuz.


Button click; çağırma olayında problem yok problem fonksiyonda bu fonksiyon 12 Milyon text satırını 16 saniyede okuyabiliryor. çok hızlı ayroca Delphi 10.1 Berlinde denedim sonuç aynı hata veren satırlar

[Error] Unit1.pas(1248): Undeclared identifier: 'TInt64Array'
setlength(rArray,perArray);



procedure TMainForm.btn2Click(Sender: TObject);
var
  datasIndex:TInt64Array;//数据文件索引
begin
 
  t1:=GetTickCount;
  datasIndex:=ScanEnterFile('R:\201201_dataFile.txt');
  Caption:=Caption+'::'+inttostr(GetTickCount-t1); 
end;
Cevapla
#8
perArray ve RowLeast değişkenlerinin varsayılan değerlerinin olduğu kısım ortada yok. O çin sitesi de ya bir yerden kopyala yapıştır yapmış yada eksik paylaşmış.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#9
(08-07-2017, Saat: 13:39)barutali Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlperArray ve RowLeast değişkenlerinin varsayılan değerlerinin olduğu kısım ortada yok. O çin sitesi de ya bir yerden kopyala yapıştır yapmış yada eksik paylaşmış.

Hiç güleceğim yoktu.  Big Grin
Çinliler zaten bu konunun (Copy-Paste) uzmanı.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#10
(08-07-2017, Saat: 13:34)Delphiseven Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-07-2017, Saat: 13:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlButton click; çağırma olayında problem yok problem fonksiyonda bu fonksiyon 12 Milyon text satırını 16 saniyede okuyabiliryor. çok hızlı ayroca Delphi 10.1 Berlinde denedim sonuç aynı hata veren satırlar

[Error] Unit1.pas(1248): Undeclared identifier: 'TInt64Array'
setlength(rArray,perArray);



procedure TMainForm.btn2Click(Sender: TObject);
var
  datasIndex:TInt64Array;//数据文件索引
begin
 
  t1:=GetTickCount;
  datasIndex:=ScanEnterFile('R:\201201_dataFile.txt');
  Caption:=Caption+'::'+inttostr(GetTickCount-t1); 
end;


MainForm'un içinde global tanımlamalara şu tanımı yaparsanız sorun çözülür gibi geliyor.

var
TInt64Array = Array of Int64;
{ talk is cheap show me the code. }
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  webden json okuma hatası arsl01 3 103 25-06-2018, Saat: 15:17
Son Yorum: arsl01
  [ÇÖZÜLDÜ]-cxDBPivotGrid Seçili Satır Alan Değeri Alma hi_selamlar 2 117 21-06-2018, Saat: 10:40
Son Yorum: hi_selamlar
  JSON Veri Okuma elixir84 12 407 12-06-2018, Saat: 13:50
Son Yorum: elixir84
  IMEI Üzeri Cihaz bilgilerini okuma dicle_gsm 13 849 02-06-2018, Saat: 15:56
Son Yorum: engerex
  Quick Report ile boş satır ekleme boreas 1 131 10-04-2018, Saat: 18:53
Son Yorum: boreas



Konuyu Okuyanlar: 1 Ziyaretçi