Delphi 快速读取TXT 指定行的数据


本文整理自网络,侵删。

 继上次的问题。在提取了大量的Email 数据后。现在读取数据成了一个问题。今天我取过1~100w的数据。明天我要取100w~200w的数据。在不用数据库的情况下,我搞了一个下午。Delphi Tstringlist 和 textfile 的简单读取是满足不了的。Tstringlist加载不了大数据。普通的textfile 读取指定行,必须循环count到指定行。

想了一下午,然后想到另类点的解决方法。先对齐数据,每行规定一样的长度。比如每行是 255字节。那么100w行就是 255*100w。直接用流seek到相应位置。动手过程中,发现了更加简单的方法。是对齐数据后,配合textfile read实现的。

定义数据结构:
type
  TEmail = packed record
    Address : string[32];
    end;

var
  MyData : file of TEmail;
  Email  : TEmail;


把TXT数据,对齐一下,按照格式生成。

procedure TForm1.btn2Click(Sender: TObject);  
var  
  txt:TextFile;  
  str:string;  
begin  
  AssignFile(MyData,'NewSave.txt');  
  Rewrite(MyData);  
  AssignFile(txt,'saved.txt');  
  Reset(txt);  
  while not Eof(txt) do  
  begin  
    str := '';  
    Readln(txt,str);  
    Email.Address := str;  
    write(MyData,Email);  
  end;  
  CloseFile(MyData);  
  CloseFile(txt);  
  ShowMessage('OK');  
end;  

然后下面是读写的示例:

{ 读取指定行测试 }  
procedure TForm1.btn1Click(Sender: TObject);  
var  
  txt:TextFile;  
  str:string;  
begin  
  AssignFile(MyData,'NewSave.txt');  
  Reset(MyData);  
  Seek(MyData,StrToInt(Trim(edt1.Text)));  
  Read(MyData,Email);  
  ShowMessage(Email.Address);  
  CloseFile(MyData);  
end;  


{ 读取1万行测试 }  
procedure TForm1.btn3Click(Sender: TObject);  
var  
  txt:TextFile;  
  str:string;  
  i:Integer;  
begin  
  AssignFile(MyData,'NewSave.txt');  
  AssignFile(txt,'10000email.txt');  
  Rewrite(txt);  
  Reset(MyData);  
  Seek(MyData,StrToInt(edt2.Text));  
  for I := StrToInt(edt2.Text) to StrToInt(edt3.Text) do  
  begin  
    Read(MyData,Email);  
    Writeln(txt,Email.AddRess);  
  end;  
  CloseFile(txt);  
  CloseFile(MyData);  
  ShowMessage('OK');  
end;  

简单粗暴 快速。

相关阅读 >>

Delphi 如何确定windows安装的语言

Delphi idhttp控件断点下载

Delphi编写聊天程序

Delphi 清空目录以及子目录

Delphi try except与try finally不同之处

Delphi内存对齐

Delphi ntfs usn 磁盘文件搜索

Delphi closefile 关闭文件

Delphi cannot find implementation of method formcreate 解决办法

Delphi 10 seattle的android应用程序的主屏幕上创建快捷方式

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...