我稍微该了下,没有调试,其实也没什么问题,就是敲错了几个地方,
主要就是全角字符的问题,你可以自己改的。在我们日常工作中,常会碰到这样一个难题:一大堆
收集好的纯文本格式,比较规整的资料怎样才能将它们分
离,转到自己已经建好的数据库中进行管理呢?  例如,有一段人事档案资料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(Var S: String; Index, Count: Integer);   //从一个字符串中去除子串  利用Delphi提供的已有函数和过程基础上编制自己的
三个函数, 实现了纯文本格式资料转入数据库功能。只要
Delphi支持的数据库都可以支持。  archive.txt中每行数据为一个字符串, 字符串中每
个被分割的数据为一个字段, 分割每个字段的字符为分割
符, 这里是空格, 也可以是, 、; 、#等符号。具体思想
是: 先将字符串进行调整, 然后把串中每个字符同分割符
比较, 将不是分割符的字符追加到MyStr串中, 最后得到
一个字段的内容。通过一个循环, 就可以将一个字符串分
成几个字段。  function Regulate(aString, Sepchar: string): string  //去掉多余的分割符, 规范字符串  function GetSubStr(var sString: string; SepChar: String): String;   //得到字符串中一个子串  //因要改变参数aString的值, 所以将它用var定义。  function GetSubStrNum(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); //取aStrin
g串中的一字符  if TempStr <> SepChar then  begin  MyStr := MyStr + TempDtr;   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: String): String;   var  Mysrt: 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;   function Tforml.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;   GetSubSrtNum := Num;   end;   有了上面三个函数, 现在介绍一下具体的应用:   1.首先建立一个窗体forml, 加入一个RichEditl(或Memol), 一个按钮Buttonl和一个Tablel, 设置Tablel
的属性:   Tablell.DataBase := 'Archive';  Tablell.TableName := 'Archive.dbf'  2.分别加入以下程序:   ConstSpace = ''  procedure Tforml.formCreate(Sender: Tobject);   begin  RichRditl.Lines.LoadFromFile('Archive.txt');   end;   procedure Tforml.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 NumToken(MyLIne, Space) do  begin  Append;   fileds[j-1].asString := GetSubSrt(MyLine, Space);   post;   end;   end;   end;   end; 

解决方案 »

  1.   

    其中的“设置Tablel的属性:
    Tablell.DataBase:=′c:ιArchivs′
    Tablell.TableName:=′Archive.dbf′"
    在哪里设置,是不是在‘object inspector’的table1的properties选项中设置呢?
      

  2.   

    我按照你的修改编了,但编译时出了不少错,请帮忙该错
    unit txttodb;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, DB, DBTables;type
      TForm1 = class(TForm)
        RichEdit1: TRichEdit;
        Button1: TButton;
        Table1: TTable;
        function Regulate(aString,Sepchar:string):string;
        
        function GetSubStr(var aString:string;SepChar:String):String;
        function GetSubStrNum(aString,SepChar:String):Integer;
      
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}
    function RegulateStr(aString:String;Sepchar:String): String;var
    i,Num:Integer;
    Flag:Boolean;
    MyStr,TempStr: String;
    beginFlag := False; 
    Num := Length(aString); 
    for i :=1 to Num dobeginTempStr := Copy(aString,i,1); 
    if TempStr <> SepChar thenbeginMyStr := MyStr + TempStr;Flag := True;endelseif(Flag = True)thenbeginMystr := Mystr + TempStr;Flag := False;end;end;if MyStr[Length(MyStr)] <> SepChar thenMyStr := MyStr+SepChar;RegulateStr :=MyStr;end;function GetSubStr(var aString:String;SepChar:String):String;varMystr: String;StrLen: Integer;SepCharPos: Integer;beginStrLen := Length(aString);SepCharPos := Pos(SepChar,aString); 
    MyStr :=Copy(aString,1,SepCharPos-1);Delete(aString,1,SepCharPos); GetSubStr:=MyStr; 
    end;function TForml.GetSubStrNum(aString:String;SepChar:String):Integer;vari:Integer;StrLen:Integer;Num : Integer;beginStrLen := Length(aString);Num:=0;for i:=1 to StrLen doif Copy(aString,i,1)=SepChar thenNum :=Num+1;GetSubStrNum := Num;end;Const
    Space=''procedure TForml.formCreate(Sender: Tobject);beginRichEditl.Lines.LoadFromFile('mytext.txt');end;procedure TForml.Button1Click(Sender: Tobject);vari, j: Integer;MyLine: String;beginwith Tablel dobeginOpen;for i := 0 to RichEditl.Lines.Count-1 dobeginMyLine := RegulateStr(RichEditl.Lines[i],Space);for j := 1 to NumToken(MyLIne, Space) dobeginAppend;fileds[j-1].aString:=GetSubStr(MyLine,Space);Post;end;end;end;end.