delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
新手提问 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiBase/html/delphi_20061204150703298.html
有两个文本文件  
  文件1内容  
  444  
  333  
  222  
  111  
  文件2内容  
  111  
  222  
  我想在文件1中每读出一行再与文件2中的每一行比较,如果相同,就不往下比了,如果读到文件2的最后还是没有相同的,就把文件1的这一行写入文本文件3中,然后再重复,直到文件1读完,我写的代码如下(循环语句部分),调试后没有这个效果,请高人指点、改正,谢谢了  
  While   Not   Eof(F1)   Do  
  begin  
          Readln(F1,Str1);  
          Flage:=true;  
          While   (Not   Eof(F2))   And   Flage=true   Do  
          begin  
                  Readln(F2,Str2);  
                  If   CompareText(str1,str2)=0   Then  
                          begin  
                          Flage:=false;  
                          end;  
          END;  
          If   Flage=true   Then  
                  begin  
                  Writeln(F3,Str1);  
                  end;  
  End;  
 

下面的代码我是用了三个StringList,可以实现你的功能.注意,C:\下要存在1.txt和2.txt,或者你自己改路径也可以.  
   
  var  
      Index1,index2,index3:integer;  
      StrList1,StrList2,StrList3:Tstringlist;  
      found:boolean;  
  begin  
            strlist1:=Tstringlist.Create;  
            strlist2:=Tstringlist.Create;  
            strList3:=TstringList.Create;  
            strlist1.LoadFromFile('c:\1.txt');  
            strlist2.LoadFromFile('c:\2.txt');  
            for   index1:=0   to   strlist1.Count-1   do  
                    begin  
                    for   index2:=0   to   strlist2.Count-1   do  
                            begin  
                            if   strlist2[index2]=strlist1[index1]   then  
                                  begin  
                                  found:=true;  
                                  break;  
                                  end;  
                            end;  
                    if   not   found   then   strlist3.Add(strlist1[index1]);  
                    found:=false;  
                    end;  
            strlist3.SaveToFile('c:\3.txt');  
            strlist3.Free;  
            strlist2.Free;  
            strlist1.Free;  
  end;

忘记在第一个for循环前面给found赋初值了,你自己加上吧:  
  found:=false;  
  或者在第一层for循环开始时赋初值,这样就不需要22行的found:=false了

谢谢lihuasoft的回复,谢谢你给出的代码,我会好好的学习的,如果能指出我的错误,那就太好了,我也就知道自己错在哪里了,这样也是对自己的提高!

以下是你的代码:     注意带注释的那句是我添加的  
   
  While   Not   Eof(F1)   Do  
  begin  
          Readln(F1,Str1);  
          Flage:=true;  
          Reset(F2);//把重置F2的语句reset(f2)放在这里,因为在一次循环之后,游标已到底  
          While   (Not   Eof(F2))   And   Flage=true   Do  
          begin  
                  Readln(F2,Str2);  
                  If   CompareText(str1,str2)=0   Then  
                          begin  
                          Flage:=false;  
                          end;  
          END;  
          If   Flage=true   Then  
                  begin  
                  Writeln(F3,Str1);  
                  end;  
  End;  
  我没有测试,你自己看一下是不是这个原因

太好了,没有错,我调试了,谢谢你lihuasoft老兄,看来我还得好好学习!

posted on 2009-04-22 10:43 delphi2007 阅读(134) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。