zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    【USACO2017JAN】 Promotion Counting
    【POJ 3468】 A Simple Problem with Integers
    【HDU 1754】 I Hate It
    【Codeforces 20C】 Dijkstra?
    【POJ 2407】 Relatives
    BZOJ5249 九省联考2018IIIDX(线段树+贪心)
    BZOJ5251 八省联考2018劈配(网络流)
    BZOJ4200 NOI2015小园丁与老司机(动态规划+上下界网络流)
    BZOJ3876 AHOI/JSOI2014支线剧情(上下界网络流)
    LOJ117 有源汇有上下界最小流(上下界网络流)
  • 原文地址:https://www.cnblogs.com/blogpro/p/11339830.html
Copyright © 2011-2022 走看看