将txt文件中的数据读入数据库。
txt文件中有如下数据:
00:IFCSUM:MANIFEST:9:83446660-8:83446660-8001:0601310953'
10::SYMS HUASHAN:CN:0604N::::20060128::CHIWAN:::'
以冒号为分隔符,两个冒号之间的数据为不定长的。我现在用
Table1.FieldByName('a').AsString:=Copy(instring,1,1);只能取定长的数据。另外还要判断每一行的前两个字符,如是00要放到00数据库,如是10则放到10数据库。
请高手赐教!!

解决方案 »

  1.   

    呵呵,真的要写代码吗?我说了个思想,你自己做起来不会难啊。
    你用一个TStringList将00:IFCSUM:MANIFEST:9:83446660-8:83446660-8001:0601310953'分解后的数据按照这样的格式分别存入,例如'00|IFCSUM'   '00|MANIFEST'    '00|9' ......到时候你一个一个的读取TStringList里面的数据,然后存入相应的数据到相应的表你先写好不好?实在写不出再提出。
      

  2.   

    没考虑什么算法,用最基本的方法写了一个,估计其中有些数量不对,自己调试一下吧
    关于表名的问题,我这里是根据00、01、10、11等特殊情况写的,如果你的表是没有规律的,就需要先建一个表的数组,然后去查表了。procedure TForm1.Button1Click(Sender: TObject);
    var
      sl: TStringList;
      tbName, i: integer;
      s, d: string;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile('data.txt');
      for i:=0 to sl.Count-1 do
      begin
        s := sl.Strings[i];
        if Pos(':', s)<=0 then continue;
        tbName := StrToInt(Copy(s, 1, Pos(':', s)-1));
        s := Copy(s, Pos(':', s)+1, Length(s));
        while Pos(':', s)>0 do
        begin
          d := Copy(s, 1, Pos(':', s)-1);
          s := Copy(s, Pos(':', s)+1, Length(s));
          with ADOQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Text := 'insert into ';
            Case tbName of
            0: SQL.Add('00');
            1: SQL.Add('01');
            2: SQL.Add('10');
            3: SQL.Add('11');
            end;
            SQL.Add(' (name) values ('''+ d +''')');
            ExecSQL;
          end;
        end;
      end;
      FreeAndNil(sl);
    end;
      

  3.   

    为了测试我对你提供的程序作了改动:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sl: TStringList;
      tbName, i: integer;
      s, d: string;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile('D:\editrans\data.txt');
      for i:=0 to sl.Count-1 do
      begin
        s := sl.Strings[i];
        if Pos(':', s)<=0 then continue;
        s := Copy(s, Pos(':', s)+1, Length(s));
        while Pos(':', s)>0 do
        begin
          d := Copy(s, 1, Pos(':', s)-1);
          s := Copy(s, Pos(':', s)+1, Length(s));
          sl.Add(d);
          end;
          ListBox1.Items.AddStrings(sl);
        end;
      end;
    可是导入后的结果却是:
    00:IFCSUM:MANIFEST:9:83446660-8:83446660-8001:0601310953'
    10::SYMS HUASHAN:CN:0604N::::20060128::CHIWAN:::
    IFCSUM
    MANIFEST
    9
    83446660-8
    83446660-8001
    00:IFCSUM:MANIFEST:9:83446660-8:83446660-8001:0601310953'
    10::SYMS HUASHAN:CN:0604N::::20060128::CHIWAN:::'
    IFCSUM
    MANIFEST
    9
    83446660-8
    83446660-8001
    SYMS HUASHAN
    CN
    0604N20060128CHIWAN
    请指教!!
      

  4.   

    sl.Add(d)?这样当然会出错了,sl的值中途是不能随便改的,我用的是 for i:=0 to sl.Count-1 do的判断,一行一行的处理,你中途又加进了新的行,会很混乱的我给你的程序里面是SQL.Add,那个是用于SQL插入语句的