用Delphi实现将纯文本资料转入数据库

来源:互联网 发布:怎样编程 编辑:程序博客网 时间:2024/06/11 18:20
用Delphi实现将纯文本资料转入数据库  
  p>  在我们日常工作中,常会碰到这样一个难题:一大堆收集好的纯文本格式,比较规整的资料怎样才能将它们分离,转到自己已经建好的数据库中进行管理呢?  
    例如,有一段人事档案资料archive.txt,内容如下:    
  小许   男   21   工程师    
  小吴   女   23   助理工程师    
  小蔡   男   22   助理工程师    
  小牟   女   22   工程师    
    要将它转入数据库archive.dbf中,archive.dbf结构如下:  
    姓名,性别,年龄,职称  
    怎么办呢?现在通过使用delphi编程,很好地解决了这个难题。Delphi提供了许多功能强大,丰富的字符处理函数和过程,常用的有:  
    (1)function   Length(S:String):Integer返回串的长度  
    (2)function   Copy(S:String;Index,Count:Integer):String   给出一个字符串中串的拷贝  
    (3)function   Pos(Substr:String;S:String);Integer   查找子串在字符串中的位置  
    (4)Procedure   Delete(VarS:String;Index,Count:Integer);从一个字符串中去除子串  
    利用Delphi提供的已有函数和过程基础上编制自己的三个函数,实现了纯文本格式资料转入数据库功能。只要Delphi支持的数据库都可以支持。  
    archive.txt中每行数据为一个字符串,字符串中每个被分割的数据为一个字段,分割每个字段的字符为分割符,这里是空格,也可以是,、;、#等符号。具体思想是:先将字符串进行调整,然后把串中每个字符同分割符比较,将不是分割符的字符追加到MyStr串中,最后得到一个字段的内容。通过一个循环,就可以将一个字符串分成几个字段。  
    Function   Regulate(aString,Sepchar:string):string   去掉多余的分割符,规范字符串  
    Function   GetSubStr(varsSt   g:string;SepChar:String):String;得到字符串中一个子串,因要改变参数aString的值,所以将它用var定义。  
    FunctionGetSubStrNum(aString,SepChar:String):Integer;计算一个字符串要被分割成几个字段。  
    参数:aString是所需分割的一个字符串,SepChar是分割符。  
   
    Function   RegulateStr(aString:String;Sepchar:String):String;    
    var  
    i,Num:Integer;  
    Flag:Boolean;  
    MyStr,TempStr:String;  
    begin  
    Flag:=False;进行标志,去除多余的分割符  
    Num:=Length(aString);   计算aString串的长度  
    for   i:=1   to   Num   do  
    begin  
    TempStr:=Copy(aString,i,1);取aString串中的一字符  
    if   TempStr   SepChar   then  
    begin  
    MyStr:=MyStr+TempStr;  
    Flag:=True;  
    end  
    else  
    if(Flag   =   True)then  
    begin  
    Mystr:=Mystr+TempSrt;  
    Flag:=False;  
    end;  
    end;  
    if   MyStr[Length(MyStr)]   SepChar   then  
    MyStr:=MyStr+SepChar;  
    RegulateSrt:=MyStr;  
    end;  
   
    Function   GetSubStr(var   aString:String,SepChar:Strign):String;  
    var  
    Mysrt:String;  
    StrLen:Integer;  
    SepCharPso:Integer;  
    begin  
    StrLen:=Length(aString);  
    SepCharPos:=Pos(SepChar,aString);计算分割符在子串中的位置  
    MyStr:=Copy(aString,1,SepCharPos-1);   将分割符前所有字符放到mystr串中  
    Delete(aString,1,SepCharPos);除去分割符和分割符前的子串  
    GetSubStr:=MyStr;返回一个字段  
    end;  
   
    FunctionTforml.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)   =   SepCharthen  
    Num:=Num+1;  
    GetSubSrtNum:=Num;  
    end;  
   
    有了上面三个函数,现在介绍一下具体的应用:  
    1.首先建立一个窗体Forml,加入一个RichEditl(或Menol),一个按钮Buttonl和一个Tablel,设置Tablel的属性:  
    Tablell.DataBase   =   c:/Archivs  
    Tablell.TableName   =Archive.dbf  
   
    2.分别加入以下程序:  
    Const   Space=    
    ProcedureTForml.FormCreate(Sender:Tobject);  
    begin  
    RichRditl.Lines.LoadFromFile(Archive.txt);  
    end;  
   
    ProcedureTForml.Button1Click(Sender:Tobject);  
    var  
    i,j:Integer;  
   MyLine:String;  
    begin  
    with   Tablel   do  
    begin  
       Open;  
   for   i:=0   to   RichEditl.Lines.Count-1   do  
   begin  
    MyLine:=RegulateStr(Richeditl.Lines[i],Space);  
    for   j:=1   to   Num   do    
    begin  
    Append;  
    fileds[j-1].aString:=GetSubSrt(MyLine,Space));  
    post;  
    end;  
    end;  
    end;  
    end;