一个约有6M大小的txt文本
里面的数据格式是每行一个
比如qqqqq
wwwww
eeeee
rrrrr
ttttt
yyyyy
uuuuu
iiiii
ooooo
ppppp
...
N行需要比较某一行是否满足条件,比如查询 iiiii
我的做法是用ListBox加截这个txt
然后
var
i: integer;
b: bool;
begin
for i:=0 to ListBox1.Items.Count -1 do
begin
if ListBox1.Items[i] = 'iiiii' then
begin
b:= true;
break;
end;
end;
if b then
ShowMessage('找到了') else ShowMessage('没找到');
end;但是太慢了,大约用了500ms.
求大神帮忙一下,能控制在100ms内最好了。
最好方式简单一点,不用在电脑上安装什么东西,比如SQL。非常感谢!
里面的数据格式是每行一个
比如qqqqq
wwwww
eeeee
rrrrr
ttttt
yyyyy
uuuuu
iiiii
ooooo
ppppp
...
N行需要比较某一行是否满足条件,比如查询 iiiii
我的做法是用ListBox加截这个txt
然后
var
i: integer;
b: bool;
begin
for i:=0 to ListBox1.Items.Count -1 do
begin
if ListBox1.Items[i] = 'iiiii' then
begin
b:= true;
break;
end;
end;
if b then
ShowMessage('找到了') else ShowMessage('没找到');
end;但是太慢了,大约用了500ms.
求大神帮忙一下,能控制在100ms内最好了。
最好方式简单一点,不用在电脑上安装什么东西,比如SQL。非常感谢!
var
SText :TStringList;
i :integer;
begin
SText := TStringList.Create;
try
SText.LoadFromFile('C:\Test.txt');
SText.Sort;
if SText.Find('iiiii',i) then
ShowMessage('"iiiii" 找到!')
else
ShowMessage('"iiiii"没找到!');
finally
Stext.Free;
end;
end;
、、、、
上面那句话没明白,然后再排序是什么意思,能不能帮忙写个完整的代码啊,谢谢!
// 窗体有一个listbox,两个按钮,一个edit
var
li: TStringList;// 添加项目按钮
procedure TForm1.btn1Click(Sender: TObject);
var
i: Integer;
begin
Randomize;
li := THashedStringList.Create;
// 插入40W项随机的10位的数字
for i := 0 to 39999 do
begin
li.Add(IntToStr(Random(9999999999)));
end;
li.Sort; // 排序
lst1.Items.AddStrings(li); // 也装进listbox显示
end;// 查询按钮
procedure TForm1.btn2Click(Sender: TObject);
var
index: Integer;
begin
if li.Find(edt1.Text, index) then
begin
GetTimeDiff(timeStart, timeEnd);
ShowMessage('找到了,在第 ' + IntToStr(index) + ' 项');
end
else
ShowMessage('没找到');
end;// 在listbox中选中一项来进行查询,方便测试
procedure TForm1.lst1Click(Sender: TObject);
begin
edt1.Text := lst1.Items[lst1.ItemIndex];
end;procedure TForm1.FormCreate(Sender: TObject);
begin
li := THashedStringList.Create;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
li.Free;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
lst1: TListBox;
edt1: TEdit;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure lst1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}// 窗体有一个listbox,两个按钮,一个edit
var
li: TStringList; // 添加项目按钮procedure TForm1.btn1Click(Sender: TObject);
var
i: Integer;
begin
Randomize;
// 插入40W项随机的10位的数字
for i := 0 to 39999 do
begin
li.Add(IntToStr(Random(9999999999)));
end;
li.Sort; // 排序
lst1.Items.AddStrings(li); // 也装进listbox显示
end;// 查询按钮procedure TForm1.btn2Click(Sender: TObject);
var
index: Integer;
begin
if li.Find(edt1.Text, index) then
begin
ShowMessage('找到了,在第 ' + IntToStr(index) + ' 项');
end
else
ShowMessage('没找到');
end;// 在listbox中选中一项来进行查询,方便测试procedure TForm1.lst1Click(Sender: TObject);
begin
edt1.Text := lst1.Items[lst1.ItemIndex];
end;procedure TForm1.FormCreate(Sender: TObject);
begin
li := TStringList.Create;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
li.Free;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btnLoad: TButton;
btnFind: TButton;
procedure btnLoadClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnFindClick(Sender: TObject);
private
{ Private declarations }
SText :TStringList;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnLoadClick(Sender: TObject);
begin
if SText=nil then
SText := TStringList.Create
else
SText.Clear;
SText.LoadFromFile('C:\Test.txt');
SText.Sorted := True;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SText.Free;
SText := nil;
end;procedure TForm1.btnFindClick(Sender: TObject);
var
i :integer;
begin
if SText.Find('iiiii',i) then
ShowMessage('"iiiii" 找到!')
else
ShowMessage('"iiiii"没找到!');
end;end.