我编写了以下两个函数,检查是没有错误的,但为什么程序在执行时没有编译到以下我标注的内容?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;
上面实现的就是这样的功能,在运行时我发现,只要文件不为空时,是可以的达到要求的;文件为空就不行了;但是那几段代码始终是没有编译到的,这是为什么呢?各位兄弟姐妹们可不可以帮我看一下啊?谢谢你们了!
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;
上面实现的就是这样的功能,在运行时我发现,只要文件不为空时,是可以的达到要求的;文件为空就不行了;但是那几段代码始终是没有编译到的,这是为什么呢?各位兄弟姐妹们可不可以帮我看一下啊?谢谢你们了!
2.因为2处都是(readln()="")的句段没有编译,请检查readln是不是不能读出空字符串.
但为什么没有执行,肯定是条件不满足
我尝试跟踪了一下,我个人认为(不一定正确):
当第三行不存在内容的时候,
Value:= S;
上面这句代码赋值给value变量的,应该不是一个''的字符串,
可能是类似于null什么的东东,所以:
if Value = '' then
的条件是不为真的
你可以该为:
if Length(Value)=0 then
再试一试吧