Kezdőoldal » Számítástechnika » Programozás » Hol hibázok? (Free Pascal,...

Hol hibázok? (Free Pascal, Típusos fájlkezelés)

Figyelt kérdés

A teljes program a következő:



program lotto;

uses crt;

var

a:array[1..51,1..5] of byte;

i,j:byte;

F:file of byte;


begin

clrscr;

assign(F, 'D:\lottosz.dat');

reset(F);

for i:=1 to 51 do

begin

for j:=1 to 5 do

begin

read(F,a[i,j]);

write(a[i,j],' ');

end;

writeln;

end;

close(F);

repeat until keypressed;

end.


Tehát adott egy fájl, 51 sor, soronként szóközzel elválasztva 5 szám.

Hiba: A beolvasás elméletig végrehajtódik, a beolvasott számoknak viszont semmi köze a fájlban lévő számokhoz.

Két napja ezen forgok, holnap emelt érettségizek informatikából és kétségbe vagyok esve xD

Segítsetek!

Köszönöm előre is!


2012. máj. 13. 10:46
 1/9 anonim válasza:

csak 1 hibat vetettel:


F:file of byte; -->> text

2012. máj. 13. 10:51
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:
Típusos fájlkezelésről van szó és mivel a fájlban minden elemtípusom byte ezért ennek így kell lennie. F:text akkor lenne ha text fájl kezelésről lenne szó.
2012. máj. 13. 10:56
 3/9 coopper ***** válasza:

Szia.



Bájtos filetipus nem szövegfájlra vonatkozik, hanem bináris fájlra, szövegfájl esetén a szövegfájlban lévő bájtokat olvasod be egyessével igy egy szám két bájton is lehet, (pl. 25-ös nyerőszám esetén a két érték amit megkapsz 50 és 53 a "2" ascii kódja = 50 és az "5"-ös ascii kódja 53 + kezelni kellene a számokat elválasztó szóközöket is)


Word, Integer, Longint, Real, és a szám tipusok ugyanazért nem jók mint a bájtos tipus.


Ha a File tipusát mint Text-et elveted akkor csak a rekord tipus jöhet szóba vagy a karakteres tipus (chr) (String tipus sem játtszik mert a hosszát is keresi - nincs a szövegfájlban letárolva a string hossza ), Ha rekord tipus akkor :


Type lottorec = record

egy : chr ;

ket : chr ;

end ;


F: File of lottorec ;


Itt meg a következő gondokat kell lekezelni :


1. Minden nyerőszámnak (a filében) két karakteren kell tárolódnia amelyik számnak nem két karakteres a hossza ott 0-t kell használni (egyébbként elcsúszik a beolvasás, pl. "9" helyet "09")


2. A két karakterből még el kell késziteni a nyerőszámot

valmi hasonló módszerrel : A[i,j]:=(ord (egy)-48)*10+ord (ket) ;


Ha karakteres tipus ott is ugyan az van mint a rekordnál kezelni kell a két karakteres számokat+a számokat elválasztó szóközöketis, és itt is el kell késziteni a karakterből a nyerőszámot.


Tehát a legjobb megoldás a TEXT, mert abból simán be lehet olvasni a számokat


A megfolgalmazásod nem tipusos fájlra utal : "Tehát adott egy fájl, 51 sor, soronként szóközzel elválasztva 5 szám." Ez tipikus TEXT fájl.


Sok sikert.

Üdv.

2012. máj. 13. 11:25
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

Szia coopper!

És mi a helyzet akkor, ha pl. a fájlomban tárolva vannak nevek és életkorok?

Pl. a fájl:


Kiss Rita 16

Nagy Aladár 18

Hegyi Vivi 21


Ez akkor ugye már egy típusos fájl.

Légyszíves írd le magát a programot, hogy ebben az esetben, hogy olvasnád be az adatokat.

Köszi a segítséget előre is!

2012. máj. 13. 11:58
 5/9 coopper ***** válasza:

Szia.


A példád sem tipusos fájl, az is sima TEXT fájl (illetve karakter tipus).


Akkor lenne az, ha a 16-ost, 18-ast, 21-est nem látnád, helyette bináris karakterek lennének és a szöveg elején ott lenne a hossz (binárisan) és mind egyforma hosszú lenne és egy sorban lennének, nem soronként :


TEXT :

Kovács József 35

Kiss Péter 65


Rekord Tipus :

!Kovács József #!Kiss Péter A


Rekord szerkezete :


Type Emberek=record

Nev : string[33];

Kor : byte ;

end ;


(A szöveg csak azért lett 33-hosszú, hogy ki tudjam irni az ascii 33-at = "!" jelet, egyébbként egy string[20]-ban 20-at kellene irnom (egy karakteren), amit sajnos nem fogad el a GYK).


Üdv.

2012. máj. 13. 12:46
Hasznos számodra ez a válasz?
 6/9 coopper ***** válasza:

Sajnos a GYK kiszedi a többszörös szóközöket a hozzászólásból, de megpróbálom aláhuzásjelekkel tehát :


TEXT :

Kovács József 35

Kiss Péter 65


Rekord Tipus :

!Kovács József____________________#!Kiss Péter_______________________A


Ahol : ________________ szóközöknek felel meg.


Üdv.

2012. máj. 13. 12:50
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

"Ez akkor ugye már egy típusos fájl."

Nem ez nem igaz ez egy szöveges fájl. Attól még (text) szöveges fájl marad mert te szóközzel elválasztva soronként ilyen adatokat tartalmaz a fájl.

Ezt szöveges fájlként soronként beolvasod (egy stringbe) majd ezt a stinget minden beolvasás után szétszeded, a szóközöket figyelembe véve.

pl: "Kiss Rita 16" Ebből lesz egy "Kiss Rita" string és egy "16" string a "16" string-et konvertálni kell szám típusra pl integer-re.

Egy típusos fájlba nincsenek sorok. Arra úgy lehet tekinteni, mint egy tömb fájlba lévő memóriaképére.


Ez fog egy típusos fájlt létrehozni:

type

Szemely=record

nev:string[40];

kor:integer;

end;

var

sz:array [1..3] of Szemely;

f:file of Szemely;

begin

sz[1].nev:='Kiss Rita';

sz[1].kor:=16;


sz[2].nev:='Nagy Aladar';

sz[2].kor:=18;


sz[3].nev:='Hegyi Vivi';

sz[3].kor:=21;


assign(f,'ki.dat');

rewrite(f);

write(f,sz[1],sz[2],sz[3]);

close(f);

end.

Ha megnyitod commanderrel F3-al akkor nem fogsz benne pl 16-ot látni. Hexa nézetben látszik a byte-ok sorozatának hexadecimális alakja, ki lehet számolni hogy milyen byte pozíciótól kezdődve meddig tart az integer, ebből ki lehet számolni hogy ez a bináris bytesorozat milyen (integer) szám értéket tartalmaz. Gyakorlatilag mintha csak a tömb memóriaképét néznénk.

2012. máj. 13. 12:55
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
"Ha megnyitod commanderrel F3-a"... mármint a ki.dat file-ra.
2012. máj. 13. 12:57
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:
Köszönöm a segítséget!
2012. máj. 13. 12:59

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!