我编写了以下两个函数,检查是没有错误的,但为什么程序在执行时没有编译到以下我标注的内容?function TForm1.WriteInToFile(const str1:string;str2:string):Boolean;
const       //写第一第二行内容;
  ln=3;
var
  F:TextFile;
  i:integer;
  S,Value:string;
begin
  Result:=False;
  AssignFile(F,GetWinSystemDir+'\'+'test1.txt');  //给文件附一个变量;
  ReSet(F);   //打开文件读;
  for i:=0 to ln-1 do    //读文件三行内容,保存第三行内容;
    begin
    ReadLn(F,S);
    Value:= S;
    end;
  CloseFile(F);
  try
    if Value = '' then     //若第三行为空;
    begin                                {程序没有编译到}
    ReWrite(F);                          {程序没有编译到}
    WriteLn(F,str1);      //写第一行内容;{程序没有编译到}
    WriteLn(F,str2);      //写第二行内容;{程序没有编译到}
    Result:=True;        //返回True;     {程序没有编译到}  
    end
  else                  //第三行为空  
    begin
    ReWrite(F);
    WriteLn(F,str1);
    WriteLn(F,str2);
    WriteLn(F,Value);  //再写第三行内容为刚才保存的Value值;
    Result:=True;
    end;
  except
  end;
  CloseFile(F);
end;
function TForm1.WriteOneToFile:Boolean;   //写第三行数字;
var
  F:TextFile;
  S1,S2,S3:string;
  Value1,Value2,Value3:string;
begin
  AssignFile(F,GetWinSystemDir+'\'+'test1.txt');
  ReSet(F);
  ReadLn(F,S1);          //读三行内容;
  ReadLn(F,S2);
  ReadLn(F,S3);
  CloseFile(F);  //读完后关闭文件;
  if S3='' then      //若第三行内容为空;
    begin                                            {程序没有编译到}  
      ReWrite(F);                                     {程序没有编译到}  
      WriteLn(F,S1);       //写入保存的第一、第二行内容;{程序没有编译到}  
      WriteLn(F,S2);                                   {程序没有编译到}  
      WriteLn(F,IntToStr(1));  //写入1到第三行;         {程序没有编译到}  
      Result:=True;      //返回True;              {程序没有编译到}  
      CloseFile(F);     //关闭打开的文件;        {程序没有编译到}  
    end
  else
    begin
      ReWrite(F);
      WriteLn(F,S1);
      WriteLn(F,S2);
      WriteLn(F,IntToStr(StrToInt(S3)+1));   //第三行内容自动加1;
      Result:=True;
      CloseFile(F);
    end;
end;     上面的两个函数的功能(这个文件只能写三行内容):
      1.第一个函数:读文件三行内容,若第三行有内容,保留第三行内容;判断第三行内容是否为空,若为空,只写入第一、二行内容即可;若不为空,就写入三行内容;
      2.第二个函数,读三行内容,分别保留其值,若第三行为空,将保留的第一、第二行值重新写入,第三行值置为1;若第三行内容不为空,重新写入三行内容,但第三行内容自动加1;
      上面实现的就是这样的功能,在运行时我发现,只要文件不为空时,是可以的达到要求的;文件为空就不行了;但是那几段代码始终是没有编译到的,这是为什么呢?各位兄弟姐妹们可不可以帮我看一下啊?谢谢你们了!

解决方案 »

  1.   

    1.确定没有编译到。
    2.因为2处都是(readln()="")的句段没有编译,请检查readln是不是不能读出空字符串.
      

  2.   

    其实程序并不是没有被编译,想想这可能吗,这种念头根本不要去想?
    但为什么没有执行,肯定是条件不满足
    我尝试跟踪了一下,我个人认为(不一定正确):
    当第三行不存在内容的时候,
    Value:= S;
    上面这句代码赋值给value变量的,应该不是一个''的字符串,
    可能是类似于null什么的东东,所以:
    if Value = '' then     
    的条件是不为真的
    你可以该为:
    if Length(Value)=0 then 
    再试一试吧