EasyDelphi Q&A
0 تصويتات
89 مشاهدات
السلام عليكم  اريد قراءة من ملف txt حجمه 2 جيغا  بسرعة يعني لا ياخذ وقت كثير
سُئل في تصنيف Delphi بواسطة (120 نقاط) | 89 مشاهدات

4 إجابة

0 تصويتات

تقدر تستخدم TfileStream راح يكون اسرع مثلن عندك ملف اسمو file.txt تفتحو على شكل stream و تنسخ مباشرا القيم الي فييه في  متغير string او buffer عندو size محدد
مثال:
 

var 
s:string;
fstream:TfileStream;
begin
    fstream:=TfileStream.create('file.txt,fmOpenRead);
    setlength(s,fstream.size);
    fstream.read(s[1],fstream.size);
    fstream.free;
    //process big string
end;

لكن طريقة انو تجيب كامل الملف ضربة وحدة و حجمو كبير ما بنصحك بيها...
الاحسن انو تجيب الداتا على شكل اجزاء و تعالجها قطعة قطعة اكيد يكون لها size  ثابت 

تم الرد عليه بواسطة (240 نقاط)
السلام عليكم
ممكن  مثال اخي و بارك الله فيك
0 تصويتات

اذا الملف نصوص . استخدم TStrings 

 

var
  SL: TStrings;
  filename: TFilename;
Procedure readFile .....
var
  filename: TFilename;
begin
  SL := TStringList.create;
  filename := 'C:\.....';
  SL.LoadFromFile(filename);
end;
الاستخدام
var i: integer := 0 to 10 do
begin
   showmessage( SL[i] );
end;

لعرضها في memo
memo1.lines := SL;


الان عندك list اسمها SL . فيها الاسطر كلها .. وسريعة جدا

 

تم الرد عليه بواسطة (25,980 نقاط)
0 تصويتات

طريقة اخرى . استخدم TEXTFile و ReadLn.

var
filename: TextFile
....

<span style="color: rgb(0, 0, 0); font-family: &quot;Courier New&quot;; font-size: small; white-space: normal; background-color: rgb(250, 250, 250);">AssignFile(myFile, 'myTextFile.txt');
</span>Reset(myFile);
...
<span style="color: rgb(0, 0, 0); font-family: &quot;Courier New&quot;; font-size: small; white-space: normal; background-color: rgb(250, 250, 250);">while not eof(myFile) do
begin
  realLn(myFile, textLine);
  showmessage( textLine );
end;

closeFile(myfile); // لا تنسى اغلاق الملف حتى لو لم تتم القراءة .
 
استبدل حلقة while بـ for اذا اردت قراءة عدد معين ومحدد من الاسطر .

 

 

تم الرد عليه بواسطة (25,980 نقاط)
+1 تصويت

استعمل CreateFileMapping

 

var
  h:hwnd;
  mem: Pointer;
  aSize: Int64;
 begin
  h := CreateFileMapping($FFFFFFFF,         // use paging file
                         0,                 // no security attributes
                         PAGE_READWRITE,    // read/write access
                         Hi(aSize),                 // size: high 32-bits
                         Low(aSize),               // size: low 32-bits
                         'myfile');  // name of map object
  if h=0 then
    exit;
  mem := MapViewOfFile( h,              // object to map view of
                       FILE_MAP_WRITE, // read/write access
                       0,              // high offset:  map from
                       0,              // low offset:   beginning
                       0);             // default: map entire file
  if mem=nil then
    exit;

المصدر

 

http://delphi.cjcsoft.net/viewthread.php?tid=49425

http://delphidabbler.com/tips/167

تم الرد عليه بواسطة (15,110 نقاط)

اسئلة متعلقة

0 تصويتات
1 إجابة
+2 تصويتات
0 إجابة
سُئل نوفمبر 17، 2018 في تصنيف Delphi بواسطة SamerAssil (25,980 نقاط) | 48 مشاهدات
+2 تصويتات
1 إجابة
سُئل يوليو 21، 2018 في تصنيف Delphi بواسطة Amar Gozim (10,690 نقاط) | 93 مشاهدات
+2 تصويتات
1 إجابة
0 تصويتات
1 إجابة
سُئل أبريل 15 في تصنيف Delphi بواسطة العالم الاخضر (140 نقاط) | 17 مشاهدات
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

396 سؤال
634 إجابة
1,130 تعليق
237 مستخدم