Mi nem helyes a következő programban? Pascalban van megírva, és a text file a pascal program mellé van elmentve.
var f:text;
begin
assign(f,'nyisd_ki.txt');
reset(f);
writeln(f);
close(f);
readln;
end.
Lefordítja, majd mikor futtatni akarom a köverkező error jelenik meg:
Error 105: File not open for output
Mi lehet a baj?
Ha most neked az hiányzik, hogy if FileExists then ....
nem minden pascal imeri !
Ebben valójában igazad van, de akkor kezdhetném magyarázni a hibakezelést. Egyszerűbb ha kikapcsolom. Annak csak egy mondat a magyarázata:
A $I fordítási direktíva szabályozza, hogy valamely I/O hiba futás közbeni hibát generáljon-e.
{$I-} nem generál hibát
{$I+} generál
Bocsi egy körmondat lett...
Az rendben van, hogy kikapcsolod az I/O hibák genérálását. Az nincs rendben, hogy nem kezeled le.
Ennél a programnál nincs vele gond mivel az I/O hibák generálásának visszakapcsolása után véget is ér a program.
De ha kód egy nagyobb program része lenne, sok gondot tud okozni, egy ilyen "lekezeletlen" I/O hiba.
var f : text;
s : string ;
begin
assign(f,'nyisd_ki.txt');
{$I-}
reset(f);
{$I+}
if ioresult=0 then begin
while not eof(f) do begin
readln(f,s);
writeln(s);
end;
close(f);
end
else begin
writeln ('A file nem nyithato meg olvasasra !');
end ;
Readln;
end.
Annyit tennék hozzá:
-létező fájl felülírására textfile esetén a Rewrite(var f:text) függvényt használjük
-Amennyiben folytatni szeretnéd a fájlt magyarán hozzáfűzni, ahogy szerintem indult a feladat, és nem igazán értem, hogy miért csak az olvasást írtátok pedig az Append( var f: text) függvényt használjunk.
Ha mindenki a hibakezelésbe kötött bele, akkor írok én is egyet. Amiben Appenddel nyitok meg egy fájlt, ha az már létezik.
program filewrite;
var f:text;
s:string;
c:char;
procedure writingfull;
begin
Rewrite(f); Writeln(f,s); Writeln("A fájlba írás megtörtént');
end;
BEGIN
Writeln("Mit szeretne kiírni a fájlba");
Readln(s);
Assign(f,'file.txt');
{I-} Reset(f); {I+}
If IOResult<>0 then begin
Writeln("A fájl nem létezik" Kívánja létrehozni a fájlt?( I/n)
repeat
c:=readkey
Until c in ['I','i','n','N'];
case c of
'I': writingfull;
'i':writingfull;
end;
end
else Begin
Writeln(f,s);
end;
end.
Egyetlen dologban nem vagyok biztos a kódban: a case- után az end-et jól zártam-e le. Amúgy elvben működnie kell,
Az else begin után kihagytam a lényeget az Append(f);
utasítást
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!