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?
Kopyala / yapıştırı eksik yapmış yapmışsın. Kodu aldığın linki gönder oradan bakayım.
(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.
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.
Ç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;