熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

文本數據導入數據庫的方法

2013-11-23 17:46:20  來源: Delphi編程 

  有一段人事檔案資料archivetxt內容如下

  小許 男  工程師
  小吳 女  助理工程師
  小蔡 男  助理工程師
  小牟 女  工程師

  要將它轉入數據庫archivedbf中archivedbf結構如下

  姓名性別年齡職稱

  怎麼辦呢?現在通過使用delphi編程很好地解決了這個難題Delphi提供了許多功能強大豐富的字符處理函數和過程常用的有

  ()function Length(SString)Integer//返回串的長度
  ()function Copy(SString;IndexCountInteger)String//給出一個字符串中串的拷貝
  ()function Pos(SubstrString;SString);Integer//查找子串在字符串中的位置
  ()Procedure Delete(VarSString;IndexCountInteger);  //從一個字符串中去除子串

  利用Delphi提供的已有函數和過程基礎上編制自己的三個函數實現了純文本格式資料轉入數據庫功能只要Delphi支持的數據庫都可以支持

  archivetxt中每行數據為一個字符串字符串中每個被分割的數據為一個字段分割每個字段的字符為分割符這裡是空格也可以是;#等符號具體思想是先將字符串進行調整然後把串中每個字符同分割符比較將不是分割符的字符追加到MyStr串中最後得到一個字段的內容通過一個循環就可以將一個字符串分成幾個字段

  Function Regulate(aStringSepcharstring)string   //去掉多余的分割符規范字符串
  Function GetSubStr(varsStringstring;SepCharString)String;  //得到字符串中一個子串因要改變參數aString的值所以將它用var定義
  FunctionGetSubStrNum(aStringSepCharString)Integer;  //計算一個字符串要被分割成幾個字段

  參數aString是所需分割的一個字符串SepChar是分割符

  Function RegulateStr(aStringString;SepcharString)String; 
  var
    iNumInteger;
    FlagBoolean;
    MyStrTempStrString;
  begin
    Flag:=False;//進行標志去除多余的分割符
    Num:=Length(aString);//計算aString串的長度
    for i:= to Num do
    begin
      TempStr:=Copy(aStringi);//取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 aStringStringSepCharStrign)String;
  var
    MysrtString;
    StrLenInteger;
    SepCharPsoInteger;
  begin
    StrLen:=Length(aString);
    SepCharPos:=Pos(SepCharaString);//計算分割符在子串中的位置
    MyStr:=Copy(aStringSepCharPos-); //將分割符前所有字符放到mystr串中
    Delete(aStringSepCharPos);//除去分割符和分割符前的子串
    GetSubStr:=MyStr;//返回一個字段
  end;

  FunctionTformlGetSubStrNum(aStringString;SepCharString)Integer;
  var
    iInteger;
    StrLenInteger;
     NumInteger;
  begin
    StrLen:=Length(aString);
    Num:=;
    for i:= to StrLen do
      if Copy(aStringi) = SepCharthen
        Num:=Num+;
    GetSubSrtNum:=Num;
  end;

  有了上面三個函數現在介紹一下具體的應用

  首先建立一個窗體Forml加入一個RichEditl(或Menol)一個按鈕Buttonl和一個Tablel設置Tablel的屬性

  TablellDataBase = c:\Archivs
  TablellTableName =Archivedbf

  分別加入以下程序

  Const Space=
  ProcedureTFormlFormCreate(SenderTobject);
  begin
    RichRditlLinesLoadFromFile(Archivetxt);
  end;

  ProcedureTFormlButtonClick(SenderTobject);
  var
    ijInteger;
     MyLineString;
  begin
    with Tablel do
    begin
       Open;
        for i:= to RichEditlLinesCount- do
        begin
        MyLine:=RegulateStr(RicheditlLines[i]Space);
        for j:= to Num do 
        begin
          Append;
          fileds[j-]aString:=GetSubSrt(MyLineSpace));
          post;
        end;
      end;
    end;
  end;


From:http://tw.wingwit.com/Article/program/Delphi/201311/25055.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.