Free pascalban a beolvasásban kellene segitség kérdés lentebb?
Egy sima txt fajból kellene beolvasnom egy tömbbe(record típusos)
a txt fájl több sorban valahogy így:
Nagy Ádám 25 Könyvelő
több sorban ilyesmik és ezt hogy tudom beolvasni egy record szerkezetbe?
Akkor a txt-fájl így néz ki:
példa:
Nagy Ádám 25 Könyvelő
Kis Márta 41 Prostituált
Vagy:
Nagy
Ádám
25
Könyvelő
Kis
Márta
41
Prostituált
....
A record hogy néz ki?
egymás mellett van 1 ember adata
Nagy Ádám 25 Könyvelő
Kis Márta 41 Prostituált
a record fájl meg ugye
3 rész 1. név
2. kor
3. melo
Ha a rekordot javítanád:
1. Vezeték név
2. Kereszt név
3. Kor
4. Foglakozás
talán egyszerűbb lenne, mert így beolvasáskor 'össze kell adni' a két első adatot. - a szóköz az értelemszerű elválasztó -
rendben, köszi :)
csak én magával a beolvasás szisztémával nem tudok mit kezdeni hogy hogy kell, ötletem sincs,
elvileg van valami törlős meg darabolós módszer vagy nem tudom. ezekről tudnátok mondani valamit?
Bár nem a legszebb, de lehet használni tipusos állományt:
Kiírás a fájlba:
Program algirithm1;
type szemely = record
Vezeteknev: String[30];
Keresztnev: String[30];
Kor: byte;
Foglalkozas: String[30];
end;
var emberek: array[1..5] of szemely;
i: integer;
var f: FILE of szemely;
begin
assign(f, 'nevsor.bat');
reset(f);
for i:= 1 to 2 do begin
read(f, emberek[i]);
end;
close(f);
for i:= 1 to 2 do
writeln(emberek[i].Vezeteknev);
readln();
end.
.....
Kiolvasás a fájlból:
Program algirithm1;
type szemely = record
Vezeteknev: String[30];
Keresztnev: String[30];
Kor: byte;
Foglalkozas: String[30];
end;
var emberek: array[1..5] of szemely;
i: integer;
var f: FILE of szemely;
begin
assign(f, 'nevsor.bat');
reset(f);
for i:= 1 to 2 do begin
read(f, emberek[i]);
end;
close(f);
for i:= 1 to 2 do
writeln(emberek[i].Vezeteknev);
readln();
end.
Erre gondoltál, ez a törlős módszer, nagyon primitív, de működik:
program Project1;
uses sysutils;
type
rekord = record
veznev, kernev, fogl: string[30];
kor: integer;
end;
var
tomb: array of rekord;
f: Text;
s: string;
i, n: integer;
begin
Assign(f, 'C:\teszt.txt');
Reset(f);
n := 0;
SetLength(tomb, n);
while not EOF(f) do
begin
Inc(n);
SetLength(tomb, n);
ReadLn(f, s);
if s <> '' then
begin
i := Pos(' ', s);
tomb[n - 1].veznev := Copy(s, 0, i - 1);
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].kernev := Copy(s, 0, i - 1);
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].kor := StrToInt(Copy(s, 0, i - 1));
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].fogl := Copy(s, 0, Length(s));
Delete(s, 1, i-1);
end;
WriteLn(tomb[n - 1].veznev);
WriteLn(tomb[n - 1].kernev);
WriteLn(tomb[n - 1].kor);
WriteLn(tomb[n - 1].fogl);
end;
Close(f);
ReadLn;
SetLength(tomb, 0);
end.
Természetesen elbírna egy kis hibakezelést :), de azt inkább hagyjuk.
Most nézem, hogy ronda egy kódot írtam, ez talán picit jobb, szebb:
program Project1;
uses sysutils;
type
rekord = record
veznev, kernev, fogl: string[30];
kor: integer;
end;
var
tomb: array of rekord;
f: Text;
s: string;
i, n: integer;
begin
Assign(f, 'C:\teszt.txt');
Reset(f);
n := 0;
while not EOF(f) do
begin
Inc(n);
SetLength(tomb, n);
ReadLn(f, s);
if s <> '' then
begin
i := Pos(' ', s);
tomb[n - 1].veznev := Copy(s, 0, i - 1);
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].kernev := Copy(s, 0, i - 1);
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].kor := StrToInt(Copy(s, 0, i - 1));
Delete(s, 1, i);
i := Pos(' ', s);
tomb[n - 1].fogl := Copy(s, 0, Length(s));
end;
WriteLn(tomb[n - 1].veznev, #10#13, tomb[n - 1].kernev, #10#13, tomb[n - 1].kor, #10#13, tomb[n - 1].fogl);
end;
Close(f);
ReadLn;
SetLength(tomb, 0);
end.
Benn maradt pár felesleges dolog.
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!