关于文本文件的读取与统计有一个文本文件,6万行左右,格式统一: 10- 0- 0- 0 test
10- 0- 0- 1 ok
......
150- 3-15- 6 test
......
2250- 3-15-16 ok
......如何实现统计10、20……2250开头的test和ok分别有多少?谢谢!分不够再加!
10- 0- 0- 1 ok
......
150- 3-15- 6 test
......
2250- 3-15-16 ok
......如何实现统计10、20……2250开头的test和ok分别有多少?谢谢!分不够再加!
FList: TStringList;
tmpStr: String;
Begin
FList:= TStringList.Create;
FList.LoadFromFile(TextFileName);
for i:=0 to flist.coun-1 do
begin
if copy(flist[i],1,2)='10' then 累加 具体位置你自己判断一下
end;
TestCount :=0;
OkCount := 0;
for index:=0 To StringList.count-1 DO
BEGIN
tmpstr := StringList.Strings[index];
len := length( tmpstr );
numindex:=1;
while( tmpstr[numindex]<>'-') and (numindex<=len) DO
numindex := numindex + 1;
if (numindex>1) and (numindex<=len) THEN
begin
numstr := copy( tmpstr,1, numindex-1);
equal := false;
for index:=1 to 225 DO
BEGIN
if StrToInt(numstr)=10*index THEN
BEGIN
//统计'test'的个数
if copy( tmpstr, len-4, 4 )='test' THEN
testCount := TestCount + 1;
//统计 'OK'的个数
IF copy ( tmpstr, len-2,2) then
OkCount := OKCount + 1;
break;
END;
END;
end;
END;
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
替换一下,把你的文件格式改成这样,加上标题行:
id1,id2,id3,id4,id5
10,0,0,0,test
10,0,0,1,ok
150,3,15,6,test
2250,3,15,16,ok
然后用ADOCONNECTION控件连上该文本文件,在表单上放一ADOquery1,设置连接为前面连接
然后用ADOquery1直接写查询语句,可得到结果,
下面为测试代码(当按下按钮BUTTON1时将,对数据进行查询并将结果写入LISTBOX1里):
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.add('select id1,id5,count(*) as ab from a#txt group by id1,id5');
// parameters[0].Value:='test';
open;
while not eof do
begin
s:=fieldbyname('id1').AsString;
s:=s+','+fieldbyname('id5').AsString;
s:=s+ ','+fieldbyname('ab').AsString;
listbox1.Items.Add(s);
next;
end;
end;
end;呵呵,这样是不是快多了啊
替换一下,把你的文件格式改成这样,加上标题行:
id1,id2,id3,id4,id5
10,0,0,0,test
10,0,0,1,ok
150,3,15,6,test
2250,3,15,16,ok
然后用ADOCONNECTION控件连上该文本文件,在表单上放一ADOquery1,设置连接为前面连接
然后用ADOquery1直接写查询语句,可得到结果,
下面为测试代码(当按下按钮BUTTON1时将,对数据进行查询并将结果写入LISTBOX1里):
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.add('select id1,id5,count(*) as ab from a#txt group by id1,id5');
// parameters[0].Value:='test';
open;
while not eof do
begin
s:=fieldbyname('id1').AsString;
s:=s+','+fieldbyname('id5').AsString;
s:=s+ ','+fieldbyname('ab').AsString;
listbox1.Items.Add(s);
next;
end;
end;
end;呵呵,这样是不是快多了啊
10- 0- 0- 0 test
10- 0- 0- 1 ok
150- 3-15- 6 test
2250- 3-15-16 ok
先把-加上两个或三过空格替换成‘,’,然后再-加一个空格把前面的都替换完后,再替换
后面文本前的空格。你的文本文件有不不规律的信息?不是统一格式的吗?当然,还有更简单的办法来处理,只要你的文件不超过65536行,且格式统一,
可不作任何处理,直接用EXCEL来打开,然后用数据透视表来汇总你需要的数据,
这样可不写任何代码。