高分请教大侠::如何将这个txt文件用程序导入到access数据库中??? ( 积分: 66 )

  • 主题发起人 主题发起人 anwin
  • 开始时间 开始时间
A

anwin

Unregistered / Unconfirmed
GUEST, unregistred user!
数据片断:
//文件开始

序号 开始时间 结束时间 事件类型 事件结果 用户号码 IMSI号码 DPC OPC CIC 附加
193 2005/03/01-07:57:45.237 2005/03/01-07:57:46.671 ISUP:呼叫事件 连接计费指示 主叫:29*****;被叫:17990; 2B-1D-96 32-C4-0F 00-08 通话时长:1122

311 2005/03/01-08:21:22.066 2005/03/01-08:21:23.030 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,未收到ACM) 主叫:2*****2;被叫:179910536; 2B-1D-96 32-C4-0F 02-08

313 2005/03/01-08:21:25.083 2005/03/01-08:22:18.005 ISUP:呼叫事件 应答计费指示 主叫:29*****;被叫:179910*****03116; 2B-1D-96 32-C4-0F 02-0A 通话时长:567

346 2005/03/01-08:24:54.656 2005/03/01-08:25:34.021 ISUP:呼叫事件 应答计费指示 主叫:39*****;被叫:179910539*****68; 2B-1D-96 32-C4-0F 03-1A 通话时长:24701

473 2005/03/01-08:41:38.397 2005/03/01-08:42:02.887 ISUP:呼叫事件 应答计费指示 主叫:22*****;被叫:17991053*****717; 2B-1D-96 32-C4-0F 02-12 通话时长:15274

476 2005/03/01-08:42:06.008 2005/03/01-08:43:16.871 ISUP:呼叫事件 应答计费指示 主叫:2*****2;被叫:17991053*****543; 2B-1D-96 32-C4-0F 02-1E 通话时长:55508

493 2005/03/01-08:43:38.650 2005/03/01-08:43:39.354 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,未收到ACM) 主叫:22*****;被叫:179910; 2B-1D-96 32-C4-0F 03-1C

578 2005/03/01-08:54:18.869 2005/03/01-08:55:03.494 ISUP:呼叫事件 应答计费指示 主叫:2*****2;被叫:1799105*****5097; 2B-1D-96 32-C4-0F 01-1E 通话时长:31221

621 2005/03/01-08:59:05.136 2005/03/01-08:59:49.055 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,收到ACM) 主叫:3*****8;被叫:17991053*****489; 2B-1D-96 32-C4-0F 01-16
。。。。。。。。。。。。。。。。。。。

用手工的方法我是这样做的,并且成功了:
导入时将第一行的字段删除,并且不留空格。在文本文件中单击“编辑”,选择“替换”菜单,查找内容:主叫,替换为 ;主叫,利用同样方法,查找内容:;(全角分号),替换为 ;(半角分号)(这样做是为了在导入成access数据库时方便分离字段,如果为全角分号或造成乱码!!!)
access中导入过程如下:
文件-〉获取外部数据-〉导入-〉选择要导入的文件,选择“带分割符”单选框,单击“下一步”按钮,在“请选择字段分割符”中单击“分号”,单击“下一步”按钮,在字段选项中,拖动水平群动条,将字段2的字段名改为callfrom(即为主叫),将字段3的字段名改为callto(即为被叫),单击“下一步”按钮2次,在“导入到表”中填入该IP接入码的运营商如tietong .
现在想用程序实现上述过程,应该如何实现???

补充一下,上面的数据都是按行显示的,前面有序号,比如193这是一条数据,再往下的311时另外一条数据。
 
数据片断:
//文件开始

序号 开始时间 结束时间 事件类型 事件结果 用户号码 IMSI号码 DPC OPC CIC 附加
193 2005/03/01-07:57:45.237 2005/03/01-07:57:46.671 ISUP:呼叫事件 连接计费指示 主叫:29*****;被叫:17990; 2B-1D-96 32-C4-0F 00-08 通话时长:1122

311 2005/03/01-08:21:22.066 2005/03/01-08:21:23.030 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,未收到ACM) 主叫:2*****2;被叫:179910536; 2B-1D-96 32-C4-0F 02-08

313 2005/03/01-08:21:25.083 2005/03/01-08:22:18.005 ISUP:呼叫事件 应答计费指示 主叫:29*****;被叫:179910*****03116; 2B-1D-96 32-C4-0F 02-0A 通话时长:567

346 2005/03/01-08:24:54.656 2005/03/01-08:25:34.021 ISUP:呼叫事件 应答计费指示 主叫:39*****;被叫:179910539*****68; 2B-1D-96 32-C4-0F 03-1A 通话时长:24701

473 2005/03/01-08:41:38.397 2005/03/01-08:42:02.887 ISUP:呼叫事件 应答计费指示 主叫:22*****;被叫:17991053*****717; 2B-1D-96 32-C4-0F 02-12 通话时长:15274

476 2005/03/01-08:42:06.008 2005/03/01-08:43:16.871 ISUP:呼叫事件 应答计费指示 主叫:2*****2;被叫:17991053*****543; 2B-1D-96 32-C4-0F 02-1E 通话时长:55508

493 2005/03/01-08:43:38.650 2005/03/01-08:43:39.354 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,未收到ACM) 主叫:22*****;被叫:179910; 2B-1D-96 32-C4-0F 03-1C

578 2005/03/01-08:54:18.869 2005/03/01-08:55:03.494 ISUP:呼叫事件 应答计费指示 主叫:2*****2;被叫:1799105*****5097; 2B-1D-96 32-C4-0F 01-1E 通话时长:31221

621 2005/03/01-08:59:05.136 2005/03/01-08:59:49.055 ISUP:呼叫事件 正常的呼叫拆线(Normal call clearing)(前向,收到ACM) 主叫:3*****8;被叫:17991053*****489; 2B-1D-96 32-C4-0F 01-16
。。。。。。。。。。。。。。。。。。。

用手工的方法我是这样做的,并且成功了:
导入时将第一行的字段删除,并且不留空格。在文本文件中单击“编辑”,选择“替换”菜单,查找内容:主叫,替换为 ;主叫,利用同样方法,查找内容:;(全角分号),替换为 ;(半角分号)(这样做是为了在导入成access数据库时方便分离字段,如果为全角分号或造成乱码!!!)
access中导入过程如下:
文件-〉获取外部数据-〉导入-〉选择要导入的文件,选择“带分割符”单选框,单击“下一步”按钮,在“请选择字段分割符”中单击“分号”,单击“下一步”按钮,在字段选项中,拖动水平群动条,将字段2的字段名改为callfrom(即为主叫),将字段3的字段名改为callto(即为被叫),单击“下一步”按钮2次,在“导入到表”中填入该IP接入码的运营商如tietong .
现在想用程序实现上述过程,应该如何实现???

补充一下,上面的数据都是按行显示的,前面有序号,比如193这是一条数据,再往下的311时另外一条数据。
 
一个例子,你看一下吧
procedure TForm1.Button1Click(Sender: TObject);
const
TabChar = #32; //定义空格键(字段分隔符)
var
i, j : integer;
D1 : Real;
TeFile1 : TextFile;
datapath, Filepath, str: string;
dd : TStrArray;
begin
try
OpenDialog1.Title := '请选择要打开的文件';
OpenDialog1.Filter := '数据文件(*.txt)|*.txt';
if OpenDialog1.Execute then
begin
DataPath := OpenDialog1.FileName; //取得文件路径
Filepath := ExtractFileName(DataPath); //取得文件名
AssignFile(TeFile1, DataPath); //将文件变量与文件关联
Reset(TeFile1); //以读写方式打开类型文件和无类型文件
try
while not Eof(TeFile1) do
begin
Application.ProcessMessages;
Readln(TeFile1, str); //一行一行的读文件,str为一行的字符串
j := 1;
while pos(TabChar, str) > 0 do
begin
dd[j] := Copy(str, 1, pos(TabChar, str));
Delete(str, 1, Pos(TabChar, str) + 1);
Str := TRIM(Str);
Inc(j);
end;
DD[9] := str;
Adotable.Append;
try
Adotable.fields[1].value := DD[1];
Adotable.fields[2].value := DD[2];
Adotable.fields[3].value := DD[3];
Adotable.fields[4].value := DD[4];
Adotable.fields[5].value := DD[5];
Adotable.fields[6].value := DD[6];
Adotable.fields[7].value := DD[7];
Adotable.fields[8].value := DD[8];
Adotable.fields[9].value := DD[9];
AdoRecordSet.Post;
except

end;
Inc(i);
Label1.Caption := IntToStr(i);
end;
MessageBox(GetactiveWindow(), '当前导入数据完毕!', '提示',
MB_OK + mb_iconexclamation);
except
CloseFile(TeFile1);
end;
end;
finally

end;
end;
 
你这个文件一行中的每一项的长度是固定的。不要用别的办法,读一个串后,定位后读数就行。交换机计费软件都是这样做的。这样可以适合更多的交换机。
不知你这个交换机是什么型号?
 
这个文件是中兴的7号信令分析仪对呼叫信令分析后得出的结果,不过中兴的7号信令分析仪没有提供导出为别的格式,比如mdb,excel等。
目前导入到access数据库中还是手工操作,虽然比较简单(对我来说[:D])不过,如果让别人用这个软件,这样做不能不说是一个麻烦[:(]
所以请交高手们帮忙解决这个问题啊~~ sos..................
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
937
SUNSTONE的Delphi笔记
S
I
回复
0
查看
850
import
I
I
回复
0
查看
691
import
I
后退
顶部