Pascal fájlkezeléssel van némi gondom. Számokat szeretnék beírni majd kiolvasni fájlból de nem vagyunk egy hullámhosszon a géppel. Egy egyszerű példával is beérem?
program szamok;
type
tszam = record
sz : integer;
end;
var
f : file of tszam;
sz: integer;
begin
assign(f,'szamok.dat');
rewrite(f);
write('szam : '); read(sz);
while sz <> '' do
begin
write(f,sz);
end;
close(f);
end.
"var
f : file of tszam;"
Inkább legyen "textfile".
program szamok;
type
tszam = record
sz : integer;
end;
var
f : file of tszam;
sz : tszam;
begin
Assign(f,'f:\szamok.dat');
ReWrite(f);
Write('szam : ');
ReadLn(sz.sz);
Write(f,sz);
Close(f);
end.
Bár az egész baromság :) ebben a formában
Először is: Nem értem, hogy mire jó egy puszta egészből rekordot csinálni. Ez még annyira sem értelmes, mint egyetlen utasítást BEGIN és END; közé fogni, lásd a WHILE-ciklusodat.
Másodszor: Ha jól értem, a következőkre kéred a programot:
1. Nyisson meg egy fájlt a „rekordjaid” számára.
2. Írja ki, hogy „szam: ”, és olvasson be egy számot.
3. Mindaddig, amíg a SZÁMOD nem üres STRING (tehát, ha a fordító nem lenne észnél, a végtelenségig), írja be ugyanazt a számot a fájlba.
4. Ha a Jóisten csodát tesz, és mégis letelik a végtelen ciklus, lelkiismeretesen zárja be a fájlt, és álljon le.
El nem tudom képzelni, miből gondoltad, hogy ez a zagyvalék valami hasonlót csinál, mint amit leírtál, még szerencse, hogy a típusütközés miatt le sem fordul.
Tőlem is egy próbálkozás -- hibakezelés egyelőre szintén nuku, illenék a fájlműveleteket meg a beolvasott számokat is ellenőrizni. Az adatok bevitelét a -11111 szám beírásával fejezheted be (vagy ha eléred a százas maximumot, magától tovább lép).
program szamok;
var
fajl : file of integer;
szamlalo, szam: integer;
oke: boolean;
begin
Assign(fajl,'szamok.dat'); ReWrite(fajl);
oke := False;
WriteLn('Írd be a számokat:');
repeat
inc(szamlalo); Write(szamlalo, '. szám: '); ReadLn(szam);
if (szam <> -11111) and (szamlalo < 100) then
Write(fajl,szam)
else
oke := True;
until oke;
Close(fajl);
Reset(fajl);
szamlalo:=0;
WriteLn; WriteLn('A fájlba írt számok:');
while not EOF(fajl) do
begin
inc(szamlalo); write(szamlalo, '. szám = '); Read(fajl,szam); WriteLn(szam);
end;
Close(fajl);
end.
pastebin
.com/WRVhpEeV
Ez a program pontosan azt csinálja, amit szeretnél, azonban hibakeresést nem írtam bele. Figyelned kell az integer túlcsordulásra, i/o hibákra.
A ciklusból kimaradt egy sor: write('szam : '); read(sz);
A programok valóban azt csinálják amit szeretnék csak továbbra sem értem a lényeget például azt a típusütközést. De sebaj a példák segítségével majdcsak összejön.
Köszönöm a válaszokat mindenkinek.
tabaki kolléga ugye a büdös sajt néhol fedezet a felvett kölcsönre :)
Más: A Val eljárás 'csodákra' képes, bármilyen 'öreg'is.
A manóba! Lám, éjjel kettőkor már lankadok, a legnyilvánvalóbb összefüggések is elkerülik a figyelmemet.
Ha nem akartam volna minél egyszerűbb megoldást, én is val()-t használtam volna. Amíg lehet, kerülöm a plusz unitokat, meg aztán nem is való már nekem ez a sok újmódi firlefranc...
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!