文件1:
有100000条手机号码 sjh10.txt
文件2:
有400000条手机号码 sjh40.txt
现在文件1里得信息在文件2里都存在,现在想取出这两个文本中得不同记录
这里得格式如下:
''张三'',''13522215464'',''地址'',''2.00'',''55224'',''幅度撒'',''分额发达''
只取出手机号即可
不通过数据库,最好是能提供思路,我得思路是 取出文件1里得记录与文件2里得记录对比,如果相等那么删除文件2和文件1里的相应记录,再进行下一条对比,如果文件1为空那么保存文件2为文件3(结果),这样可能要求系统得配置要高,所以我想求一个好得解决方案,和实例
我已经想得郁闷了

解决方案 »

  1.   

    思路:procedure TForm1.Button2Click(Sender: TObject);
    var
      i,j:integer;
      IsHave: Boolean;
    begin
      Memo1.Lines.LoadFromFile('../sjh10.txt');
      Memo2.Lines.LoadFromFile('../sjh40.txt');
      for i := 0 to Memo2.Lines.Count - 1 do
      begin
        IsHave := False;
        for j := 0 to Memo1.Lines.Count - 1 do
          if Copy(Memo2.Lines.Strings[j], Pos(',', Memo2.Lines.Strings[j]) + 3, 11)
             = Copy(Memo1.Lines.Strings[i], Pos(',', Memo1.Lines.Strings[i]) + 3, 11) then
          begin
            isHave := True;
            Break;
          end;
        if not IsHave then Memo3.Lines.Add(Memo2.Lines.Strings[j]); //Memo3里就是不同 的记录
      end;
    end;
      

  2.   

    将两个文本中的纪录先读到两个TStringList中,然后比较两个TStringList,将不同的纪录留下,删掉相同的,然后再将两个TStringList剩下的合并起来,就是要的结果。
      

  3.   

    帮我看看应该要怎么改
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       if opendialog1.Execute then
       begin
          memo1.Lines.LoadFromFile(opendialog1.FileName);   end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       if opendialog1.Execute then
       begin
          memo2.Lines.LoadFromFile(opendialog1.FileName);   end;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
       i,j,k,str_num1,str_num2:integer;
       str1,str2:string;
       str3:TStrings;
    begin
       //str1:=TStringlist.Create;//多
       //str2:=TStringlist.Create;//少
       str3:=TStringlist.Create;//结果
       str_num1:=memo1.Lines.Count;//多的记录数
       str_num2:=memo2.Lines.Count;//少的记录数
       str3.Text:=memo2.Text;
       for i:=0 to (str_num1 div 20) do
       begin
          str1:=copy();
          for j:=0 to (str_num2 div 2) do
          begin         str2:=memo2.Lines.Strings[j];
             //str2:=copy()
             if strcomp(PChar(''+str1+''),PChar(''+str2+''))=0 then
             begin
                str3.Delete(j);
                //str3.Delete[j];
                memo2.Lines.Delete(j);
             end
             else
                begin
                  for k:=(str_num2 div 2 +1) to str_num2-1 do
                  begin
                     if strcomp(PChar(''+str1+''),PChar(''+str2+''))=0 then
                     begin
                       str3.Delete(k);
                       memo2.Lines.Delete(k);
                       if memo1.Text='' then
                       exit;
                     end;
                  end;
                end;
             end;
          end;
          str3.SaveToFile('sjhbj.txt');
       end;
    end.