如何把.txt文件中的数据写入数据库中(请各为高手帮助)500!!!!(100分)

  • 主题发起人 主题发起人 jz_wq
  • 开始时间 开始时间
J

jz_wq

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把.txt文件中的数据写入数据库中。
例:.txt 文件数据如下
8401 012000 1756 89123  081110291 0008
   012000 1756 89123  081110291 0008
8401 012000 1756 89123  081110291 0098 200012
8401 012000 1756 89123  081110291 0002
436 012000 1756 89123  081110291 0118
8401 012000 1756 89123  081110291 0011

 
既然每列数据的位置都能够确定,就一列一列的Copy
从一行中按顺序读出各个字段(字符串形式)
|
逐个字段判断是否全为空格
| |
|N |Y
| |
IntToStr Null
写入数据库的相应字段
 
这个很简单。

对TXT文件你可以按行读出,再把每行数据按空格拆分,拆分时记录一下拆分数。

用程序建数据库,做个循环,把数据放入库中。你可以把它做成函数.
 
我贴一个极为类似的程序,只不过该程序中只实现两列的读取,多列的读取可自行推出
var
str:Tstrings;
i,j,strlength:integer;
strline:string;
wd:string;
translate:string;
begin
if OpenDialog1.Execute then
begin
str:=Tstringlist.Create;
str.LoadFromFile(Opendialog1.FileName);
end;
for i:=0 to str.Count-1 do
begin
strline:=str.Strings;
j:=pos(#9,strline);
table1.Append;
wd:=copy(strline,0,j-1);
table1.FieldValues['word']:=wd;
strlength:=length(strline);
translate:=copy(strline,j+1,strlength-j+10);
table1.Post;
end;
str.free;
end;
 
to jz_wq:
我做了个小程序,要发给你吗?
思路是这样的:
//先载入文本到MEMO控件里
if opentxt.Execute then//opentxt是TOpenDialog控件
begin
filename:=trim(opentxt.FileName);
memo1.Lines.Clear;
memo1.Lines.LoadFromFile(trim(opentxt.FileName));
if memo1.Lines[0]='*' then
application.MessageBox('此文本载已过,不能载入系统!','系统提示',
MB_ICONerror+MB_OK);
button2.Enabled:=true;
end
else
application.MessageBox('文本载入出错!','系统提示',
MB_ICONerror+MB_OK);
//然后用分隔符把文本的一列一列分开和数据库的字段对应连接
//接着把MEMO1的一列一列地插入到表里对应的字段里
 
用access 新建db1,导入文本数据 数据间分割选择" " ,就ok ,
写程序 连续用read 分割用" '也ok
 
类似编译程序的词法分析?
 
听:
1。先将文件读入memo或 richedit中 调用lines(I:为行号)。然后逐行处理。
2。调用如copy ,delete等函数将你所需的字段加入数据库中相应字段(.txt中得数据
必须是规则的),其中的规则就靠你自己了。不妨编几个判断规则的函数!很方便的。
 
用手工的方法:用excel调用该TXT文件,另存为dbf,再用datapump转为你想要的数据库格式
程序的办法: 自己写代码吧。
或者考虑用ODBC连接此TXT文件
 
多谢大家了,能给我一个详细的例子吗?
 
抄的给你一个:
用Delphi实现将纯文本资料转入数据库

  在我们日常工作中,常会碰到这样一个难题:一大堆收集好的纯文本格式,比较规整的资料怎样才能将它们分离,转到自己已经建好的数据库中进行管理呢?例如,有一段人事档案资料document.txt,内容如下:

  张强,25,助理工程师,

  王宏,30,工程师,

  李远,45,高级工程师,

  要将它转入数据库中,document.db结构如下:

  姓名,年龄,职称

  怎么办呢?现在通过使用delphi编程,很好地解决了这个难题。Delphi提供了许多功能强大,丰富的字符处理函数和过程,常用的有:

  ① function Length(S:String):Integer  //返回串的长度

  ② function Copy(S:String; Index,Count: Integer):String

  //给出一个字符串中串的拷贝

  ③ function Pos(Substr:String; S:String); Integer  

  //查找子串在字符串中的位置

  ④ Procedure Delete(Var S:String; Index,Count: Integer);

  //从一个字符串中去除子串

  利用Delphi提供的已有函数和过程基础上编制自己的三个函数,实现了纯文本格式资料转入数据库功能。只要Delphi支持的数据库都可以支持。

  Document.txt中每行数据为一个字符串,字符串中每个被分割的数据为一个字段,分割每个字段的字符为分割符,这里是逗号,也可以是、;#等符号。具体思想是:先将字符串进行调整,然后把串中每个字符同分割符比较,将不是分割符的字符追加到MyStr串中,最后得到一个字段的内容。通过一个循环,就可以将一个字符串分成几个字段。

  Function GetSubStr(var aString:string; SepChar:String): String;

  //得到字符串中一个子串

  因要改变参数aString的值,所以将它用var定义。

  Function GetSubStrNum(aString, SepChar: String): Integer;

  //计算一个字符串要被分割成几个字段。

  参数:aString是所需分割的一个字符串,

  SepChar是分割符。
  Function GetSubStrNum(aString:String;SepChar:String):integer;
  var
  i:Integer;
  StrLen:Integer;
  Num:Integer;
  begin
  StrLen:=Length(aString);
  Num:=0;
  For i:=1 to StrLen do
  If Copy(aString,i,1) = SepChar then
  Num:=Num+1;
  result:=Num;
  end;
  Function GetSubStr(var aString:String;SepChar:String):String;
  var
  Mystr:String;
  StrLen:Integer;
  SepCharPos:Integer;
  begin
  StrLen:=Length(aString);
  SepCharPos:=Pos(SepChar,aString); //计算分割符在子串中的位置
  MyStr:=Copy(aString,1,SepCharPos-1); //将分割符前所有字符放到mystr串中
  Delete(aString,1,SepCharPos); //除去分割符和分割符前的子串
  GetSubStr:=MyStr; //返回一个字段
  end;

  有了上面三个函数,现在介绍一下具体的应用:

  ① 首先建立一个窗体Forml,加入一个RichEditl(或Menol),一个按钮Buttonl和一个Tablel,设置Tablel的属性:

  Tablell.DataBaseName:= 'c:/test';

  Tablell.TableName:= 'document.db';

  ② 分别加入以下程序:

  const
  SepChar=',' ;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  RichEdit1.Lines.LoadFromFile('c:/test/test.txt');
  end;
  procedure TForm1.Button1Click(Sender: TObject);
  var
  i,j,num:Integer;
  MyLine:String;
  item:array[1..3] of string;
  begin
  For i:=0 to RichEdit1.Lines.Count-1 do
  begin
  MyLine:=Richedit1.Lines;
  num:=GetSubStrNum(myline,SepChar);
  for j:=1 to num do
  item[j]:=GetSubStr(myline,SepChar);
  table1.open;
  with table1 do
  begin
  table1.insert;
  table1name.Asstring:=item[1];
  table1age.Asinteger:=strtoint(item[2]);
  table1title.Asstring:=item[3];
  table1.post;
  end;
  table1.close;
  end;
  end;

 
接受答案了.
 
后退
顶部