Delphi Can

Orjinalini görmek için tıklayınız: Hızlı satır okuma bu fonksiyonu çalıştıramadım satır okuma fonksiyonu
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2 3
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;
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: [ -> ]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;

Merhaba,

Int64 ü LongInt olarak değiştirip deneyebilir misin?
(08-07-2017, Saat: 11:45)barutali Adlı Kullanıcıdan Alıntı: [ -> ]Int64 ü LongInt olarak değiştirdim bu defa 
setlength(rArray,perArray);
ve 
curIndex:=RowLeast;
bu satılarda hata verdi
Kopyala / yapıştırı eksik yapmış yapmışsın. Kodu aldığın linki gönder oradan bakayım.
(08-07-2017, Saat: 12:54)barutali Adlı Kullanıcıdan Alıntı: [ -> ]eksik almadım bu linkte orjinal kod : https://www.bbsmax.com/A/lk5a0B3NJ1/
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: [ -> ]Bu 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.
(08-07-2017, Saat: 13:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: [ -> ]
(08-07-2017, Saat: 10:18)Delphiseven Adlı Kullanıcıdan Alıntı: [ -> ]Bu 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;
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ış.
(08-07-2017, Saat: 13:39)barutali Adlı Kullanıcıdan Alıntı: [ -> ]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ış.

Hiç güleceğim yoktu.  Big Grin
Çinliler zaten bu konunun (Copy-Paste) uzmanı.
(08-07-2017, Saat: 13:34)Delphiseven Adlı Kullanıcıdan Alıntı: [ -> ]
(08-07-2017, Saat: 13:18)Abdullah Ilgaz Adlı Kullanıcıdan Alıntı: [ -> ]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;


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

var
TInt64Array = Array of Int64;
Sayfalar: 1 2 3