|
| Tæller i Pascal parser Fra : Torben Jørgensen |
Dato : 01-02-03 01:58 |
|
Hej alle
Jeg er ved at lave et statestik program til et spil. Jeg orker ikke den helt
lange forklaring, så her er den korte. Når jeg parser for kills/deaths for
hver spiller gemmes dette resultat i en fil, vi kan kalde fil 1. Derefter
tjekkes der om der findes et resultat fra en anden parsing, i en anden fil,
fil2 gør der ikke det, så fyldes fil2 med spiller navn og 9 "0" pr spiller,
som lægges sammen med fil 1. Mit problem er at, når jeg addere tallene der
er i 1.fil med fil 2 så bliver hverandet tal udskiftet med et "0" og det
skal det ikke. Jeg mener "4 + 0 = 4", Right? Proceduren jeg laver
additionen i ser sådan ud:
procedure Addkills;
var
Tstatus, killfile, killfile2:TextFile;
name:string;
Nr1, Nr2:LongInt;
result1, result2, final:LongInt;
begin
Nr1:=0;
Nr2:=0;
AssignFile(killfile, 'C:\Badass Stats\Buddy\TempKill1.txt');
Assign(Tstatus, 'c:\Badass Stats\Buddy\Tempkillstatus.txt');
AssignFile(killfile2, 'C:\Badass Stats\Buddy\TempKill2.txt');
Reset(killfile); (*killfile, indeholder et spiller navn + 9 "0",
derefter det næste spillernavn og 9 "0"*)
Reset(Tstatus); (*Tstatus, er den fil der indeholder de antal
kill/death der er fundet ved en parsing*)
Append(killfile2); (*Indholdet af killfile og Tstatus adderes i
killfile2*)
While not eof(Tstatus) do
begin
ReadLn(Tstatus, name);
ReadLn(Tstatus, Nr1);
result1:=Nr1;
ReadLn(killfile, name);
ReadLn(killfile, Nr2);
result2:=(Nr2 + Nr1);
WriteLn(killfile2, name); (*Her udskrives resultatet af additionen i
killfile2*)
WriteLn(killfile2, result2);
end;
Close(Tstatus);
Close(killfile);
Close(killfile2);
end;
Resultatet af en parsing ser således ud i filen "Tstatus":
[B@dass Joe DK]
4
4
2
2
4
4
1
3
3
Et eller andet
3
2
4
4
2
5
1
3
3
Indholdet af "killfile" ser således ud:
[B@dass Joe DK]
0
0
0
0
0
0
0
0
0
Et eller andet
0
0
0
0
0
0
0
0
0
De enkelte resultater for hver spiller adders og udskrives i "killfile2" og
ser sådan ud:
[B@dass Joe DK]
4
0
2
0
4
0
1
0
3
Et eller andet
3
0
4
0
2
0
1
0
3
Og det er ligesom lidt forkert . Jeg bruger normal Pascal 7.0 i Delphi. Jeg
ved meget lidt om Delphi, så hvis nogen kunne komme med et godt forslag??
Mange hilsner
Torben
| |
René Allan Larsen (01-02-2003)
| Kommentar Fra : René Allan Larsen |
Dato : 01-02-03 19:41 |
|
In article <b1f5ts$2hk$1@sunsite.dk>, Torben Jørgensen wrote:
>
> Hej alle
>
> Jeg er ved at lave et statestik program til et spil. Jeg orker ikke den helt
> lange forklaring, så her er den korte. Når jeg parser for kills/deaths for
> hver spiller gemmes dette resultat i en fil, vi kan kalde fil 1. Derefter
> tjekkes der om der findes et resultat fra en anden parsing, i en anden fil,
> fil2 gør der ikke det, så fyldes fil2 med spiller navn og 9 "0" pr spiller,
> som lægges sammen med fil 1. Mit problem er at, når jeg addere tallene der
> er i 1.fil med fil 2 så bliver hverandet tal udskiftet med et "0" og det
> skal det ikke. Jeg mener "4 + 0 = 4", Right? Proceduren jeg laver
> additionen i ser sådan ud:
Jo, regnestykket 4+0 giver fire, men problemet er, at du læser hvert andet tal
som et navn (nemlig "0") og derpå skriver det igen.
> Og det er ligesom lidt forkert . Jeg bruger normal Pascal 7.0 i Delphi. Jeg
> ved meget lidt om Delphi, så hvis nogen kunne komme med et godt forslag??
Dit program vil heller ikke komme til at virke under BP7/TP uden at du løser
problemet med algoritmen først.
Her er hvad din beskrivelse siger:
Åbn inputfil1
Åbn inputfil2
Åbn outputfil
sålænge der er mere i inputfilerne
læs navn1 fra inputfil1
læs navn2 fra inputfil2
gentag 9 gange
læs nr1 fra inputfil1
læs nr2 fra inputfil2
skriv (nr1+nr2) til outputfil
slut-gentag
slut-sålænge
Luk inputfil1
Luk inputfil2
Luk outputfil
Her er hvad dit program faktisk gør:
Åbn inputfil1
Åbn inputfil2
Åbn outputfil
sålænge der er mere i inputfilerne
læs navn1 fra inputfil1
læs navn2 fra inputfil2
læs nr1 fra inputfil1
læs nr2 fra inputfil2
skriv (nr1+nr2) til outputfil
slut-sålænge
Luk inputfil1
Luk inputfil2
Luk outputfil
Kan du se forskellen? Den eneste grund til at du ikke har opdaget problemet
før er at det tilfældigvis passer sådan, at navnet altid læses ind i en
streng. Hvis der havde været et tal mere eller mindre, ville du have fået en
fejl, når programmet forsøgte at indlæse en streng i en integer-variabel.
(Og i dit tilfælde er den forskel på et Pascal- og et Delphi-program navnene
på de procedurer som åbner og lukker filerne, nemlig Assign/AssignFile og
Close/CloseFile)
MVH, René
| |
Torben Jørgensen (02-02-2003)
| Kommentar Fra : Torben Jørgensen |
Dato : 02-02-03 01:16 |
|
"René Allan Larsen" <rene.larsen@spamfilter.dk> wrote in message
news:VA.0000001b.0008e687@spamfilter.dk...
> In article <b1f5ts$2hk$1@sunsite.dk>, Torben Jørgensen wrote:
Hey René, tak for dit svar, men om jeg fatter hvordan det så skal bygges .
Kan du hjælpe??
Mange hilsner
Torben
> Her er hvad din beskrivelse siger:
>
> Åbn inputfil1
> Åbn inputfil2
> Åbn outputfil
> sålænge der er mere i inputfilerne
> læs navn1 fra inputfil1
> læs navn2 fra inputfil2
> gentag 9 gange
> læs nr1 fra inputfil1
> læs nr2 fra inputfil2
> skriv (nr1+nr2) til outputfil
> slut-gentag
> slut-sålænge
> Luk inputfil1
> Luk inputfil2
> Luk outputfil
>
> Her er hvad dit program faktisk gør:
>
> Åbn inputfil1
> Åbn inputfil2
> Åbn outputfil
> sålænge der er mere i inputfilerne
> læs navn1 fra inputfil1
> læs navn2 fra inputfil2
> læs nr1 fra inputfil1
> læs nr2 fra inputfil2
> skriv (nr1+nr2) til outputfil
> slut-sålænge
> Luk inputfil1
> Luk inputfil2
> Luk outputfil
>
> Kan du se forskellen? Den eneste grund til at du ikke har opdaget
problemet
> før er at det tilfældigvis passer sådan, at navnet altid læses ind i en
> streng. Hvis der havde været et tal mere eller mindre, ville du have fået
en
> fejl, når programmet forsøgte at indlæse en streng i en integer-variabel.
>
> (Og i dit tilfælde er den forskel på et Pascal- og et Delphi-program
navnene
> på de procedurer som åbner og lukker filerne, nemlig Assign/AssignFile og
> Close/CloseFile)
>
> MVH, René
>
| |
René Allan Larsen (02-02-2003)
| Kommentar Fra : René Allan Larsen |
Dato : 02-02-03 19:27 |
|
In article <b1hnrm$qq5$1@sunsite.dk>, Torben Jørgensen wrote:
>
> "René Allan Larsen" <rene.larsen@spamfilter.dk> wrote in message
> news:VA.0000001b.0008e687@spamfilter.dk...
> > In article <b1f5ts$2hk$1@sunsite.dk>, Torben Jørgensen wrote:
>
> Hey René, tak for dit svar, men om jeg fatter hvordan det så skal bygges .
> Kan du hjælpe??
Her er koden til at læse filen i dit originale program:
While not eof(Tstatus) do
begin
ReadLn(Tstatus, name);
ReadLn(Tstatus, Nr1);
result1:=Nr1;
ReadLn(killfile, name);
ReadLn(killfile, Nr2);
result2:=(Nr2 + Nr1);
WriteLn(killfile2, name);
WriteLn(killfile2, result2);
end;
Her er koden arrangeret som min algoritme beskrev den:
While not eof(Tstatus) do
begin
ReadLn(Tstatus, name);
ReadLn(killfile, name);
WriteLn(killfile2, name);
FOR I := 1 TO 9 DO (* <<<<<<<<<<<<<<<*)
BEGIN (* <<<<<<<<<<<<<<<*)
ReadLn(Tstatus, Nr1);
ReadLn(killfile, Nr2);
WriteLn(killfile2, Nr1+Nr2);
END; (* <<<<<<<<<<<<<<<*)
end;
Så simpelt er det ;) (jeg manglede dog at skrive navnet i den originale
algoritme).
MVH, René
| |
Torben Jørgensen (02-02-2003)
| Kommentar Fra : Torben Jørgensen |
Dato : 02-02-03 19:58 |
|
Hej René
Mange tak for hjælpen!!
Jeg har simpelthen siddet og stirret mig blind på koden og kunne ikke se
skoven for bar´træer. Skidet virker.
Hilsner
Torben
> Her er koden arrangeret som min algoritme beskrev den:
>
> While not eof(Tstatus) do
> begin
> ReadLn(Tstatus, name);
> ReadLn(killfile, name);
> WriteLn(killfile2, name);
> FOR I := 1 TO 9 DO (* <<<<<<<<<<<<<<<*)
> BEGIN (* <<<<<<<<<<<<<<<*)
> ReadLn(Tstatus, Nr1);
> ReadLn(killfile, Nr2);
> WriteLn(killfile2, Nr1+Nr2);
> END; (* <<<<<<<<<<<<<<<*)
> end;
>
> Så simpelt er det ;) (jeg manglede dog at skrive navnet i den originale
> algoritme).
>
> MVH, René
>
| |
|
|