Kezdőoldal » Számítástechnika » Programozás » Mi nem helyes a következő...

Mi nem helyes a következő programban? Pascalban van megírva, és a text file a pascal program mellé van elmentve.

Figyelt kérdés

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?



2013. jún. 10. 20:41
1 2
 11/18 coopper ***** válasza:
Talán kimaradt azért.
2013. jún. 10. 21:54
Hasznos számodra ez a válasz?
 12/18 SimkoL ***** válasza:

Ha most neked az hiányzik, hogy if FileExists then ....

nem minden pascal imeri !

2013. jún. 10. 21:58
Hasznos számodra ez a válasz?
 13/18 A kérdező kommentje:
Köszönöm mindenkinek, sikerült!
2013. jún. 10. 21:59
 14/18 coopper ***** válasza:
Nem a fileexist hiányzik nekem, hanem az ioresult() azt viszont minden pascal ismeri.
2013. jún. 10. 22:05
Hasznos számodra ez a válasz?
 15/18 SimkoL ***** válasza:

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...

2013. jún. 10. 22:23
Hasznos számodra ez a válasz?
 16/18 coopper ***** válasza:

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.

2013. jún. 11. 07:49
Hasznos számodra ez a válasz?
 17/18 anonim ***** válasza:

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,

2013. jún. 11. 08:05
Hasznos számodra ez a válasz?
 18/18 anonim ***** válasza:

Az else begin után kihagytam a lényeget az Append(f);

utasítást

2013. jún. 11. 08:05
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!