如何分别读取一个目录下的多个文本文件,并筛选出有用的内容存入数据库表中相应的字段,文本文件内容如下 (200分)

  • 主题发起人 主题发起人 美国提子
  • 开始时间 开始时间

美国提子

Unregistered / Unconfirmed
GUEST, unregistred user!
出账日期: 合同号:
银行账号: 开户银行:工商银行
号码 月租费 次数费 本地网 信息费 国内费 国际费 其它+附加+169费 总费 客户名称
-------------------------------------------------------------------------------------------------
长话5220122 0.00 0.00 0.00 0.00 152.04 0.00 0.00 152.04 集团有限公司 程控制造部 //从这行开始内容有用,'长话'两字不要
长话5226469 0.00 0.00 0.00 0.00 3.60 0.00 0.00 3.60 集团有限公司 网络技术有限公司
长话5229135 0.00 0.00 0.00 0.00 412.08 0.00 0.00 412.08 集团有限公司 程控制造部
长话5229916 0.00 0.00 0.00 0.00 535.44 0.00 0.00 535.44 集团有限公司 程控制造部
长话8865307 0.00 0.00 0.00 0.00 1154.64 0.00 0.00 1154.64 网络技术有限公司
长话8865308 0.00 0.00 0.00 0.00 99.36 0.00 0.00 99.36 集团有限公司 程控制造部
长话8865309 0.00 0.00 0.00 0.00 119.52 0.00 0.00 119.52 集团有限公司 销售部
长话8865310 0.00 0.00 0.00 0.00 70.68 0.00 0.00 70.68 集团有限公司 程控制造部
长话8865311 0.00 0.00 0.00 0.00 1079.28 0.00 0.00 1079.28 集团有限公司 销售部
长话8865313 0.00 0.00 0.00 0.00 707.64 0.00 0.00 707.64 集团有限公司 程控制造部
长话8865315 0.00 0.00 0.00 0.00 123.12 0.00 0.00 123.12 集团有限公司 程控制造部
长话8865320 0.00 0.00 0.00 0.00 1793.88 0.00 0.00 1793.88 集团有限公司 程控制造部
市话5220122 30.00 231.00 38.35 3.60 0.00 0.00 4.55 307.50 集团有限公司 程控制造部
市话5221151 30.00 46.60 28.30 0.00 0.00 0.00 2.40 107.30 集团有限公司 程控制造部
市话5226469 30.00 20.60 1.60 0.00 0.00 0.00 2.40 54.60 集团有限公司 程控制造部
市话5229135 30.00 102.10 53.25 8.00 0.00 0.00 2.40 195.75 集团有限公司 程控制造部
市话5229434 30.00 0.00 0.00 0.00 0.00 0.00 2.40 32.40 集团有限公司 销售部
市话5229916 30.00 68.60 22.25 0.00 0.00 0.00 2.40 123.25 集团有限公司 程控制造部
市话8865307 30.00 59.00 44.45 0.00 0.00 0.00 6.00 139.45 集团有限公司 程控制造部
市话8865308 30.00 16.00 20.00 0.00 0.00 0.00 2.40 68.40 集团有限公司 程控制造部
市话8865309 30.00 38.80 28.40 0.00 0.00 0.00 2.40 99.60 集团有限公司 程控制造部
市话8865310 30.00 29.70 22.80 0.00 0.00 0.00 17.95 100.45 集团有限公司 程控制造部
市话8865311 30.00 96.00 56.80 0.00 0.00 0.00 2.40 185.20 集团有限公司 程控制造部
市话8865312 30.00 94.20 109.85 0.00 0.00 0.00 2.40 236.45 集团有限公司 程控制造部
市话8865313 30.00 71.00 28.40 0.00 0.00 0.00 2.40 131.80 集团有限公司 程控制造部
市话8865315 30.00 51.00 27.60 0.00 0.00 0.00 2.40 111.00 集团有限公司 程控制造部
市话8865316 30.00 0.00 0.00 0.00 0.00 0.00 2.40 32.40 集团有限公司 程控制造部
市话8865317 30.00 99.30 49.15 3.00 0.00 0.00 5.65 187.10 集团有限公司 程控制造部
市话8865319 30.00 77.00 19.60 0.00 0.00 0.00 2.40 129.00 集团有限公司 销售部
市话8865320 36.00 57.80 22.80 0.00 0.00 0.00 2.40 119.00 集团有限公司 程控制造部
市话8865325 30.00 87.70 40.00 10.20 0.00 0.00 2.60 170.50 集团有限公司 销售部
市话8865483 30.00 0.00 0.00 0.00 0.00 0.00 2.40 32.40 集团有限公司 程控制造部 //到这行结束
-------------------------------------------------------------------------------------------------
*****总计***** 8814.83


//表中已建立了相应的字段
如:号码 为 No,月租费 为 MMoney等
 
function DivStr(Str:String):TStringList;
begin
Result:=TStringList.Create;
Delete(Str,1,4);
Result.CommaText:=Str;
end;
使用的时候只要判断返回结果的Count就知道这一行是不是文件的数据部分。
一行一行的读进去,判断是否是数据,然后就不用我说了吧。(记得用完了Free喲~)

eg:
Memo1.Text:=DivStr('长话5226469 0.00 0.00 0.00 0.00 3.60 0.00 0.00 3.60 集团有限公司 程控制造部').Text;
 
大哥,详细一点好吗?
使用的时候只要判断返回结果的Count就知道这一行是不是文件的数据部分//我不晓得啊
还有怎么将相应的内容存入相应的字段啊,总之呢,越详细越好,最好把我当白痴,呵呵
 
>>最好把我当白痴
这么无理的要求... 晕倒!

格式分析:
注意到数据正文的前面和后面都有'--------------------------',显然它的Count=1,并且
除了这两行以外,其它行没有Count=1的情况。可以利用这一点作为数据段的起始和终止标志。

function DivStr(Str:String;MaxCount:Integer):TStringList;
begin
Result:=TStringList.Create;
Delete(Str,1,4);
Result.CommaText:=Str;
if Result.Count=MaxCount+1 then //你最后一个字段的数据竟然有空格!!??
begin
Result[MaxCount-1]:=Result[MaxCount-1]+' '+Result[MaxCount];
Result.Delete(MaxCount);
end;
end;
procedure GetFromFile(FileName:String);
var
SL:TStringList;
i:Integer;
Start:Boolean;
begin
SL:=TStringList.Create;
SL.LoadFromFile(FileName);
Start:=false;
for i:=0 to SL.Count do
begin
with DivStr(SL,10) do
begin
if Count=1 then //发现标志行
if not Start then
begin
Start:=true;
end
else
break;
if (Count>1) and Start then
begin
//在此加入数据库操作语句——你应该能够事先确定哪一列对应哪个字段吧
Form1.Memo1.Lines.Add(Strings[0]+' ## '+Strings[Count-1]);
end;
Free;
end;
end;
SL.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetFromFile('F:/aaa.txt');
end;
 
function tform1.getstr(str:string):string;
var i,j:integer;
ss:string;
temp:tstringlist;
begin
i:=1;
temp:=tstringlist.Create ;
j:=pos(' ',str);
showmessage(str+','+inttostr(j));
while j<>0 do
begin
if j>1 then
temp.Add(copy(str,i,pos(' ',str)));
delete(str, i,j);
j:=pos(' ',str);
end;
ss:='"';
for i:=0 to temp.count-1 do
begin
ss:=ss+temp.Strings+'"';
end;
temp.Free;
result:=ss;
end;

procedure TForm1.Button1Click(Sender: TObject);
var loadstring:tstringlist;
i:integer;
s:string;
begin
loadstring:=tstringlist.Create ;
loadstring.LoadFromFile('d:/fsad');
for i:=0 to loadstirng.count-1 do
begin
s:=getstr(loadstring.Strings);
if s<>'"' then
begin
query1.close;
query1.sql.text:='insert into table values('+s+')';
query1.execsql;
end;
end;
end;
 
呵呵,非常感谢,给分再说
to 天真 呵呵,抱歉,没看到时玩灵性给分
 
后退
顶部