文件中的内容如下:列1 列2 列3
--------------------
AAAAAAAA BBBBBB 2500
AAAAAAAA BBBBBB 3000
BBBBBBBB AAAAAA 2500
BBBBBBBB AAAAAA 500
BBBBBBBB BBBBBB 2500想要得到如下結果:AAAAAAAA BBBBBB 5500
BBBBBBBB AAAAAA 3000
BBBBBBBB BBBBBB 2500就是不能用数据庫、有什魔好方法馬?
--------------------
AAAAAAAA BBBBBB 2500
AAAAAAAA BBBBBB 3000
BBBBBBBB AAAAAA 2500
BBBBBBBB AAAAAA 500
BBBBBBBB BBBBBB 2500想要得到如下結果:AAAAAAAA BBBBBB 5500
BBBBBBBB AAAAAA 3000
BBBBBBBB BBBBBB 2500就是不能用数据庫、有什魔好方法馬?
honkiko(honky) 写代码吧
MyList: TStringList;
i: integer;
begin
MyList:=TStringList.Create;
MyList.LoadFromFile('c:\MyFile.txt');
MyList.Sort;
for i:=MyList.Count-1 downto 1 do
if MyList[i]=MyList[i-1] then MyList.Delete(i);
MyList.SaveToFile('c:\MyFile1.txt');
MyList.Free;
end;file 处理下
数字放前面
2500 AAAAAAAA BBBBBB
3000 AAAAAAAA BBBBBB
2500 BBBBBBBB AAAAAA
500 BBBBBBBB AAAAAA
2500 BBBBBBBB BBBBBB
var
MyList: TStringList;
i: integer;
begin
MyList:=TStringList.Create;
MyList.LoadFromFile('c:\MyFile.txt');
MyList.Sort;
MyList.SaveToFile('c:\MyFile1.txt');
MyList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyList: TStringList;
i,j: integer;
ResultList: TStringList;
s: string;
position: integer;
r1,r2: integer;
begin
MyList:=TStringList.Create;
ResultList:=TStringList.create;
ResultList.clear;
MyList.LoadFromFile('c:\MyFile.txt');
MyList.Sort;
{
AAAAAAAA BBBBBB 2500
AAAAAAAA BBBBBB 3000
BBBBBBBB AAAAAA 500
BBBBBBBB AAAAAA 2500
BBBBBBBB BBBBBB 2500
}
i:=0;
j:=0;
s:=MyList.Strings[0];
ResultList.Add(s);
//showmessage(MyList.Strings[0]);
//如果前面两列相等 +数 第二个空格为分割符号
//如果不相等 加列
for i:=1 to MyList.count-1 do
begin
s:=MyList.Strings[i];
position:=pos(' ',s);
s:=trimleft(copy(s,pos(' ',s),length(s)-pos(' ',s))); position:=position+pos(' ',s);
s:=MyList.Strings[i];
s:=trimleft(copy(s,1,position));
if s=copy(ResultList.Strings[j],1,position) then
begin
r1:=strtoint(trimleft(copy(ResultList.Strings[j],position,length(ResultList.Strings[j])-position+1)));
r2:=strtoint(trimleft(copy(MyList.Strings[i],position,length(MyList.Strings[i])-position+1)));
ResultList.Strings[j]:=s+' '+inttostr(r1+r2);
end
else
begin
s:=MyList.Strings[i];
ResultList.Add(s);
inc(j);
end;
end;
ResultList.SaveToFile('c:\Result.txt');
MyList.Free;
ResultList.free;
end;
改为
ResultList.Strings[j]:=s+inttostr(r1+r2);
格式就对齐了
可以先取第一个字符串,将第2个空格前面切出循环来比较,如果相同,把值一加,然后删除一样的stringlist项,做一次循环旧可以写完
知道的,说说 曾经问过的帖子,呵呵
http://community.csdn.net/Expert/topic/3400/3400970.xml?temp=1.682681E-02
schema.ini的内容如下:
[temp1.txt]
ColNameHeader=false
Format=Delimited( )
Col1=Col1 Char Width 8
Col2=Col2 Char Width 6
Col3=Col3 Char Width 4//説明:此処字段長度是固定的、長度(Width)不包含隔離符号、
隔離符号(Delimited)在此是一個空格。二.ADOQuery1的属性ConnectionString的内容:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\...\DB_Text;Extended Properties=Text;Persist Security Info=FalseADOQuery1.SQL.Text := 'SELECT col1, col2, SUM(col3) FROM temp1#txt GROUP BY col1,col2';//説明:上述Data Source是実際的文本文件所在的路径名