Help needed, Please!!!

Help!!!
Really struggling with this. Below i have a chunk of code from a program, assuming all external references are correct, and the file 'teamfile' exists and is pointed to correctly. Can anyone see why on the second time of executing the procedure 'readteamdets' that a file I/O error 103 would occur?




procedure readteamdets(I,J:integer;var team1 : teamdets;var team2 : teamdets;tfilestring : string);
var teamfile : file of teamdets;
begin
assignfile(teamfile,tfilestring);

reset(teamfile);
seek(teamfile,(i-1)); // Use Team (I's) Details
read(teamfile,team1);

reset(teamfile);
seek(teamfile,(j-1)); // Use Team (J's) Details
read(teamfile,team2);
closefile(teamfile);
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
var i : integer; //row of matchday array
j : integer; //column of matchday array
m : integer; // loop variable for gamescores;
b : integer; // loop variable for bowlers lineup;
k : integer; // loop variable for bowlers lineup;
x : integer;
y : integer; // loop variable for number matchdays required;
matches : integer;
tmp : string;
bowler : bowlerdets;
bowlfile : file of bowlerdets;
teamfile : file of teamdets;
match : matchinfo;
matchfile : Textfile;
matchstring : string;
matchDay : array[1..4,1..4] of integer;
team1 : teamdets;
team2 : teamdets;
tfilestring : string;
begin
tmp := '';
for i := 1 to 3 do tmp := tmp + league.leagueName[i];
matches := 0;
randomize;

//loop creates initial setup of matchday array
for i := 1 to league.TeamsInput do
for j:= 1 to league.TeamsInput do
begin
if j > i then matchday[i,j] := 0
else matchday[i,j] := -1;
end;

tfilestring := 'c:TPManage'+inttostr(league.startyear)+''+tmp+'team.Tpd';
assignfile(bowlfile,'c:TPManage'+inttostr(league.startyear)+''+tmp+'play.Tpd');
// assignfile(teamfile,'c:TPManage'+inttostr(league.startyear)+''+tmp+'team.Tpd');
// this loop is ussed for the matchday number & date
for y:=1 to (league.TeamsInput-1) do
begin
repeat
{repeat until number of allocated matches
= number matches needed per match day}

repeat
{picks random I & J values with conditions :
-----I must be greater than J
-----matchday[i,j] must be unallocated '0'}
i := random(league.TeamsInput) +1;
j := random(league.TeamsInput)+1;
until (j>i) and (matchday[i,j] = 0);

matchday[i,j] :=2; //set matchday[i,j] to allocated '2'

//Now to prevent team I/J playing again today :
for x:=1 to league.TeamsInput do
begin
if matchday[i,x] = 0 then matchday[i,x]:=1;
if matchday[x,i] = 0 then matchday[x,i]:=1;
if matchday[j,x] = 0 then matchday[j,x]:=1;
if matchday[x,j] = 0 then matchday[x,j]:=1;
end;

matches := matches + 1; // number of matches allocated currently
until (matches = (league.TeamsInput div 2));
showmessage('num matches allocated : '+inttostr(matches));

{now to extract necessary information for a single match day using the array that maps the matches}
match.matchID := y;
// reset(teamfile);
for i:=1 to league.TeamsInput do
for j:=1 to league.TeamsInput do
if (j>i) and (matchday[i,j] = 2) then
begin
matchday[i,j] := 3; //set match I&J to played already '3'
showmessage('I := ' + inttostr(i) + 'J := '+ inttostr(j));
{********Retrieves team 1 And 2's details from teamfile********}
readteamdets(I,J,team1,team2,tfilestring);

{**********Store team 1's (i's) Details into Match variable **********}
// showmessage('team : '+team1.name);
match.ID1 := team1.teamID;
match.team1name := team1.name;
for k:=1 to league.bowlPerMatch do
begin
// showmessage('K : '+inttostr(k)+'lineup[k] : '+inttostr(team.lineup[k]));
reset(bowlfile);
if team1.lineup[k] <> -1 then seek(bowlfile,team1.lineup[k]-1);
read(bowlfile,bowler);
match.team1[k].ID := bowler.bowlerID;
match.team1[k].firstname := bowler.firstName;
match.team1[k].surname := bowler.surname;
end;
closefile(bowlfile);

{**********Store team 2's Details into Match variable **********}
match.ID2 := team2.teamID;
match.team2name := team2.name;
// showmessage('team : '+team.name);

for k:=1 to league.bowlPerMatch do
begin
// showmessage('K : '+inttostr(k)+'lineup[k] : '+inttostr(team.lineup[k]));
reset(bowlfile);
if team2.lineup[k] <> -1 then seek(bowlfile,team2.lineup[k]-1);
read(bowlfile,bowler);
match.team2[k].ID := bowler.bowlerID;
match.team2[k].firstname := bowler.firstName;
match.team2[k].surname := bowler.surname;
end;
closefile(bowlfile);
showmessage('Match between... team1 : '+match.team1name+' team2 : '+match.team2name);

{********creating the matchstring to write to the textfile ********}
matchstring := inttostr(match.ID1)+','+match.team1name+',';
for b := 1 to 10 do
begin
if match.team1[b].firstname <> '' then
begin
matchstring := matchstring + inttostr(match.matchID) + inttostr(match.team1[b].ID) +','+ match.team1[b].Firstname +','+ match.team1[b].surname+',';
for m := 1 to 6 do matchstring := matchstring + inttostr(match.team1[b].gamescores[m]) +',';
end;
end;
matchstring := matchstring+inttostr(match.ID2)+','+match.team2name+',';
for b := 1 to 10 do
begin
if match.team1[b].firstname <> '' then
begin
matchstring := matchstring + inttostr(match.team2[b].ID) +','+ match.team2[b].Firstname +','+ match.team2[b].surname+',';
for m := 1 to 6 do matchstring := matchstring + inttostr(match.team2[b].gamescores[m]) +';';
end;
end;
showmessage(matchstring);
//assigns the match file handler to correct file
assignfile(matchfile,'c:TPManage'+tmp+inttostr(match.matchID)+'.Tpd');
{$IOChecks off}
reset(matchfile);
try
append(matchfile);
writeln(matchstring);
except
rewrite(matchfile);
writeln(matchfile,matchstring);
end;
closefile(matchfile);
{$IOChecks ON}
DisplaySched;
end;
end;

end;

cheers Der_ranga

Comments

  • : Help!!!
    : Really struggling with this. Below i have a chunk of code from a program, assuming all external references are correct, and the file 'teamfile' exists and is pointed to correctly. Can anyone see why on the second time of executing the procedure 'readteamdets' that a file I/O error 103 would occur?
    :
    I'm in no way an expert, but did you close the teamfile after reading it the first time?

    Could be so simple as that.
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

In this Discussion