有两个文本文件
文件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;

解决方案 »

  1.   

    下面的代码我是用了三个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;
      

  2.   

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

  3.   

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

  4.   

    以下是你的代码:  注意带注释的那句是我添加的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;
    我没有测试,你自己看一下是不是这个原因
      

  5.   

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