/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Records og Array
Fra : Torben Jørgensen


Dato : 25-07-03 14:38

Hej Gruppe
Jeg sidder og roder med Pascal 7.0 i Delphi 7. Og har lidt problemer, håber
en venlig sjæl kan hjælpe. Jeg har erklæret følgende Record som bliver lagt
i et en dimetionel Array:

type
TStatsName = record
Name: string[50];
end;
TStats = ARRAY(.1..255.) OF TStatsName;
TStatsFile = File OF TStatsName;

Hvis jeg nu skriver:

Stats.TName:= 'Egon Olsen';

Så bliver 'Egon Olsen' lagt ned i Recordens Name felt og Egons Record bliver
så gemt på den første plads i det Array jeg har oprettet, forudsat at der
ikke står noget på den første plads i forvejen eller hvad????

Forudsat at Egon Olsen ligger på plads 1 i Array´et og Ib ligger på plads 2
og Bente ligger på plads 3. Hvordan sletter jeg fx Ib på plads 2 og rykker
Bente fra plads 3 til plads 2?

Hvis nogle kunne hjælpe mig med et komplet kode eksempel, vil jeg sætte pris
på det. Jeg har gennemtravlet nettet i to dage og det eneste jeg kan finde
er tuts, der viser hvordan man opretter Records og Arrays.

På forhånd tak
Torben



 
 
Preben Mikael Bohn (25-07-2003)
Kommentar
Fra : Preben Mikael Bohn


Dato : 25-07-03 15:00

Torben Jørgensen wrote:
> Hej Gruppe
> Jeg sidder og roder med Pascal 7.0 i Delphi 7. Og har lidt problemer, håber
> en venlig sjæl kan hjælpe. Jeg har erklæret følgende Record som bliver lagt
> i et en dimetionel Array:
>
> type
> TStatsName = record
> Name: string[50];
> end;
> TStats = ARRAY(.1..255.) OF TStatsName;
> TStatsFile = File OF TStatsName;
>
> Hvis jeg nu skriver:
>
> Stats.TName:= 'Egon Olsen';
>
> Så bliver 'Egon Olsen' lagt ned i Recordens Name felt og Egons Record bliver
> så gemt på den første plads i det Array jeg har oprettet, forudsat at der
> ikke står noget på den første plads i forvejen eller hvad????

Den overskriver den, hvis jeg forstår dit spørgsmål ret (og under
antagelse af at Stats : TStats og at du mener Stats[1].Name:= 'Egon
Olsen';, er det korrekt???).

> Forudsat at Egon Olsen ligger på plads 1 i Array´et og Ib ligger på plads 2
> og Bente ligger på plads 3. Hvordan sletter jeg fx Ib på plads 2 og rykker
> Bente fra plads 3 til plads 2?

Igen under antagelse af det ovenstående, hvad med:
Stats[2] := TStatsName(Stats[3]);

Ved ikke lige umiddelbart om typecastingen er nødvendig...

> Hvis nogle kunne hjælpe mig med et komplet kode eksempel, vil jeg sætte pris
> på det. Jeg har gennemtravlet nettet i to dage og det eneste jeg kan finde
> er tuts, der viser hvordan man opretter Records og Arrays.

Sig lige til om mine antagelser er korrekte...

Med venlig hilsen Preben


Torben Jørgensen (25-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 25-07-03 16:48

Hej Preben
Mange tak for dit svar. Jeg tror at jeg er lidt "in over my head" her. Pt
er jeg snot forvirret. Jeg har i nogen tid forsøgt at lave et statestik
program til et spil. Det skulle helst være så nemt at bruge at selv den
værste nybegynder kan bruge det. Jeg har lavet en udgave af programmet, men
strukturmæssigt er det noget utroligt rod og ikke til at styre. Jeg ønsker
ikke at bruge en database, da brugere ikke kan forventes at kunne finde ud
af at installere den slags. Et andet problem er at jeg helt sikkert ikke
forstår arrays, som jeg burde og jeg kan heller ikke helt gennemskue om det
i det hele taget er en intelligent måde jeg gør det på.

Jeg vil simpelthen kunne indtaste en spillers navn, parse log filen med
hans/hendes navn og gemme skidtet i fx en record. Min tanke var at oprettet
en spiller record, gemme denne record på en plads i et array. Når der så
skal parse en log fil så finder en løkke den første spiller record i
array´et og derefter parser log filen. De oplysninger der findes ved
parsingen bliver så gemt i dens spillers record og så kan man så out putte
resultatet. Jeg havde tænkt mig at bruge en tekst til at gemme de
forskellige records. Men jeg kan sgu ikke finde ud af hvordan man gør eller
hvordan man sletter en spillers record. Hvis du har lyst til at lave et
frisk eksempel med fx kun et navne felt i recorden, er du meget velkommen.

Hilsen
Torben



Harald (25-07-2003)
Kommentar
Fra : Harald


Dato : 25-07-03 19:22

"Torben Jørgensen" <vilfert@hotmail.com> skrev i en meddelelse
news:bfrj39$2det$1@news.cybercity.dk...
> Hej Preben
> Mange tak for dit svar. Jeg tror at jeg er lidt "in over my head" her. Pt
> er jeg snot forvirret. Jeg har i nogen tid forsøgt at lave et statestik
> program til et spil. Det skulle helst være så nemt at bruge at selv den
> værste nybegynder kan bruge det. Jeg har lavet en udgave af programmet,
men
> strukturmæssigt er det noget utroligt rod og ikke til at styre. Jeg ønsker
> ikke at bruge en database, da brugere ikke kan forventes at kunne finde ud
> af at installere den slags. Et andet problem er at jeg helt sikkert ikke
> forstår arrays, som jeg burde og jeg kan heller ikke helt gennemskue om
det
> i det hele taget er en intelligent måde jeg gør det på.
>
> Jeg vil simpelthen kunne indtaste en spillers navn, parse log filen med
> hans/hendes navn og gemme skidtet i fx en record. Min tanke var at
oprettet
> en spiller record, gemme denne record på en plads i et array. Når der så
> skal parse en log fil så finder en løkke den første spiller record i
> array´et og derefter parser log filen. De oplysninger der findes ved
> parsingen bliver så gemt i dens spillers record og så kan man så out putte
> resultatet. Jeg havde tænkt mig at bruge en tekst til at gemme de
> forskellige records. Men jeg kan sgu ikke finde ud af hvordan man gør
eller
> hvordan man sletter en spillers record. Hvis du har lyst til at lave et
> frisk eksempel med fx kun et navne felt i recorden, er du meget velkommen.

Hvis der ikke er alt for mange spillere kan du bruge TStringList og gemme
alle data i en text fil, dataene for de enkelte spillere kan gemmes i
TStringList´en som komma sep. linier, der er indbyggede funktioner i
TStringList til disse ting. En anden mulighed er at benytte TInifile (eller
lign) og gemme alle data i ini format, jeg ville nok vælge ini løsningen da
dette format er meget let at redigere i manuelt hvis det skulle blive
nødvendig og man kan senere tilføje felter uden at skulle "konvertere" hele
"databasen".

Mvh
HK



Torben Jørgensen (25-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 25-07-03 20:17

Hey Harald

Well... jeg må nok se i øjene at det er for svært for mig at lave
programmet. Jeg er simpelthen ikke dygtig nok til at gennemskue tingene.
Samtidig er mit kendskab til Delphi for overfladisk. Jeg bliver nødtil at
opgive. Men rigtig mange tak for svarrene.

Hilsen
Torben



Harald (26-07-2003)
Kommentar
Fra : Harald


Dato : 26-07-03 15:07

"Torben Jørgensen" <vilfert@hotmail.com> skrev i en meddelelse
news:bfrvas$2qc7$1@news.cybercity.dk...
> Hey Harald
>
> Well... jeg må nok se i øjene at det er for svært for mig at lave
> programmet. Jeg er simpelthen ikke dygtig nok til at gennemskue tingene.
> Samtidig er mit kendskab til Delphi for overfladisk. Jeg bliver nødtil at
> opgive. Men rigtig mange tak for svarrene.

Jeg kan da godt lave et lille eks. hvis du tror det kan få dig videre.

/HK



Torben Jørgensen (27-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 27-07-03 18:24

Hej Harald
Tak for tilbudet, det var dig der hjalp mig til at lave den første udgave.
Men jeg giver op - det er for svært for mig at lave programmet. Det
opløftende er dog at der er en gut i USA der laver et statestik program der
hedder Psykostats og han er igang med en udgave der skulle kunne bruges til
mange spil. Problemet med det er tilgengæld at en totalt nybegynder, ender
at rive håret ud af hovedet i bar desperation over at sætte det op. Det var
det jeg ville prøve at fikse.

Torben



Heinrich Christianse~ (26-07-2003)
Kommentar
Fra : Heinrich Christianse~


Dato : 26-07-03 06:27

Hej Torben!


> type
> TStatsName = record
> Name: string[50];
Bande: string[50];
> end;
> TStats = ARRAY(.1..255.) OF TStatsName;
> TStatsFile = File OF TStatsName;

Tilføjelse:
var
Stats: TStats;

begin
Stats[1].Name:= 'Egon Olsen';
Stats[1].Bande:= 'Olsen Banden';
Stats[2].Name:= 'Kjeld';
Stats[2].Bande:= 'Olsen Banden';
end.

Så passer pengene!

En Record er egentlig en definitionsmetode til at definere multivariable så
Stats består af en tabel (array) af multivariabel-typen TStatsName som så
består af 2 forskellige variabler nemlig Name og Bande.

Stats
1. Name = Egon Olsen
Bande = Olsen Banden
2. Name = Kjeld
Bande = Olsen Banden

TStatsName er blevet defineret som en type - der fungerer på samme måde som
typen string[50]

Mvh. Heinrich Christiansen


---
Denne mail er certificeret virusfri
This mail is certified Virus Free.

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18-07-2003



Torben Jørgensen (27-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 27-07-03 18:38

Damm Drenge
Det er lige før at jeg går igang igen hehe. Takker meget for eksemplet
Heinrich!! Men hvis, vi "leger" at der på nuværende tidspunkt er blevet 15
medlemmer af Olsen Banden og medlem nr 8, dvs. Børge. Børge har været i
Yvonnes hash kager og derfor har Egon besluttet sig for at smide Børge ud af
banden, dvs. han skal slettets af listen. Så hvordan finder jeg hele Børges
record og sletter den, helst uden at efterlade blanke pladser i rækkefølgen?

Torben

"Heinrich Christiansen" <olfred@12_mail.dk> wrote in message
news:MioUa.38519$Kb2.1552473@news010.worldonline.dk...
> Hej Torben!
>
>
> > type
> > TStatsName = record
> > Name: string[50];
> Bande: string[50];
> > end;
> > TStats = ARRAY(.1..255.) OF TStatsName;
> > TStatsFile = File OF TStatsName;
>
> Tilføjelse:
> var
> Stats: TStats;
>
> begin
> Stats[1].Name:= 'Egon Olsen';
> Stats[1].Bande:= 'Olsen Banden';
> Stats[2].Name:= 'Kjeld';
> Stats[2].Bande:= 'Olsen Banden';
> end.
>
> Så passer pengene!
>
> En Record er egentlig en definitionsmetode til at definere multivariable

> Stats består af en tabel (array) af multivariabel-typen TStatsName som så
> består af 2 forskellige variabler nemlig Name og Bande.
>
> Stats
> 1. Name = Egon Olsen
> Bande = Olsen Banden
> 2. Name = Kjeld
> Bande = Olsen Banden
>
> TStatsName er blevet defineret som en type - der fungerer på samme måde
som
> typen string[50]
>
> Mvh. Heinrich Christiansen
>
>
> ---
> Denne mail er certificeret virusfri
> This mail is certified Virus Free.
>
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.502 / Virus Database: 300 - Release Date: 18-07-2003
>
>



Heinrich Christianse~ (27-07-2003)
Kommentar
Fra : Heinrich Christianse~


Dato : 27-07-03 19:25

Hej igen Torben!

> Heinrich!! Men hvis, vi "leger" at der på nuværende tidspunkt er blevet 15
> medlemmer af Olsen Banden og medlem nr 8, dvs. Børge. Børge har været i
> Yvonnes hash kager og derfor har Egon besluttet sig for at smide Børge ud
af
> banden, dvs. han skal slettets af listen. Så hvordan finder jeg hele
Børges
> record og sletter den, helst uden at efterlade blanke pladser i
rækkefølgen?

Hvis vi forudsætter at der kun er indtastet medlemmer af olsenbanden ind i
listen så er det meget nemt at gøre det, det er imidlertid en smule sværere
at gøre det hvis der er andre bander i listen men absolut ikke
uoverkommeligt!

Kun Olsen Bande-medlemmer:

Vi leger at vi ved at Børge er nr. 8 i listen!

Stats[8] := Stats[15];
Stats[15].Name:= '';
Stats[15].Bande:= '';

Så er det løst! men det vil ødelægge en evt sortering!

Nu leger vi at vi ikke ved hvilken position Børge har i listen men at vi ved
at der er 15 personer i listen:

> > > type
> > > TStatsName = record
> > > Name: string[50];
> > Bande: string[50];
> > > end;
> > > TStats = ARRAY(.1..255.) OF TStatsName;
> > > TStatsFile = File OF TStatsName;
> >
> > Tilføjelse:
> > var
> > Stats: TStats;
Antal: Integer;
Talt: Integer;
FundetPost: Boolean;
SoegtNavn: string[50];
SoegtBande: string[50];
> >
> > begin
.... klippet fra!
Vi antager at Antal er 15
Talt:= 1;
FundetPost:= False;
SoegtNavn:= 'Børge';
SoegtBande:= 'Olsen Banden';
Repeat
If (SoegtNavn = Stats[Talt].Name)
And (SoegtBande = Stats[Talt].Bande)
Then FundetPost:= True;
// Check på begge Name og Bande
If FundetPost = True Then Begin // Kopier næste post ind i denne
post
Stats[Talt]:= Stats[(Talt + 1)];
End;
Inc(Talt); Optæl talt position!
Until Talt >= Antal;
Dec(Antal); // Der er nu en mindre i listen!
> > end.
> >
> > Så passer pengene!

Tja! Det kan lade sig gøre!

Det der sker er at Listen løbes igennem fra ende til anden! Listen starter
jo ved 1 så det er Talt!

Repeat - Until funktionen er en rimelig nem løkke at bruge!

Vi checker om Name = SoegtNavn og om Bande = SoegtBande Og hvis det matcher
så skal fundetPost variablen være sand!

Bagefter - ikke indeni - Checkes om FundetPost er sand - Hvis den er sand
skal posterne rokeres en tand ned efter tur!

Til sidst skal Antallet af registrerede personer nedtælles med den ene som
børge var!

Listen løbes kun igennem en gang så der er ikke det store tidsforbrug!

Det er en lignende process når der skal indsættes en ny person og posterne
altså skal sorteres i forbindelse med indtastningerne! Også her løbes løkken
kun igennem en gang!

Det er noget andet hvis den skal sorteres efter noget tids usorteret
indtastninger!

Jeg håber det kan hjælpe dig!

Mvh. Heinrich


---
Denne mail er certificeret virusfri
This mail is certified Virus Free.

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18-07-2003



Torben Jørgensen (27-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 27-07-03 23:18


"Heinrich Christiansen" <olfred@12_mail.dk> wrote in message
news:XNUUa.39838$Kb2.1655084@news010.worldonline.dk...

Hey Heinrich
Hell yeah, det giver mening og minder om alt det vi formodes at have "lært"
på datamatikkeren.
Jeg forstår godt dit gode eksempel og jeg sætter virkelig pris på hjælpen.
Hvis vi nu forudsætter at til at starte på, så består Olsen banden af 0
medlemmer. Så kommer Egon til verden og han stiller sig mit på en pløje mark
i øs regnvejr, skriger af Gud, og siger jeg vil være med i Olsen Banden!! Nu
ligger det sådan at Gud har været på druk så han siger bare ok.

Der går nu nogen tid og der er efterhånden kommet 15 medlemmer med i Olsen
banden. Nu er det sådant, at det dybest set er en flok børn der skændes
konstant, den ene stjæler den andens slikke pind etc., så de har besluttet
sig for at afgøre diverse tvistigheder ved at spille "Medal of Honor".
Derfor indtaster Gud en række felter i recorden. Felter som "PistolKill" og
"PistolDeath", disse felter er tomme da banden først skal have deres første
spil i morgen. Som jeg ser det kan vi kun finde Børge i rækket vha. af hans
navn og bande tilhørsforhold og det er liget meget, hvad der ellers er af
felter eller hvad?

Torben

> Hvis vi forudsætter at der kun er indtastet medlemmer af olsenbanden ind i
> listen så er det meget nemt at gøre det, det er imidlertid en smule
sværere
> at gøre det hvis der er andre bander i listen men absolut ikke
> uoverkommeligt!
>
> Kun Olsen Bande-medlemmer:
>
> Vi leger at vi ved at Børge er nr. 8 i listen!
>
> Stats[8] := Stats[15];
> Stats[15].Name:= '';
> Stats[15].Bande:= '';
>
> Så er det løst! men det vil ødelægge en evt sortering!
>
> Nu leger vi at vi ikke ved hvilken position Børge har i listen men at vi
ved
> at der er 15 personer i listen:
>
> > > > type
> > > > TStatsName = record
> > > > Name: string[50];
> > > Bande: string[50];
> > > > end;
> > > > TStats = ARRAY(.1..255.) OF TStatsName;
> > > > TStatsFile = File OF TStatsName;
> > >
> > > Tilføjelse:
> > > var
> > > Stats: TStats;
> Antal: Integer;
> Talt: Integer;
> FundetPost: Boolean;
> SoegtNavn: string[50];
> SoegtBande: string[50];
> > >
> > > begin
> ... klippet fra!
> Vi antager at Antal er 15
> Talt:= 1;
> FundetPost:= False;
> SoegtNavn:= 'Børge';
> SoegtBande:= 'Olsen Banden';
> Repeat
> If (SoegtNavn = Stats[Talt].Name)
> And (SoegtBande = Stats[Talt].Bande)
> Then FundetPost:= True;
> // Check på begge Name og Bande
> If FundetPost = True Then Begin // Kopier næste post ind i
denne
> post
> Stats[Talt]:= Stats[(Talt + 1)];
> End;
> Inc(Talt); Optæl talt position!
> Until Talt >= Antal;
> Dec(Antal); // Der er nu en mindre i listen!
> > > end.
> > >
> > > Så passer pengene!
>
> Tja! Det kan lade sig gøre!
>
> Det der sker er at Listen løbes igennem fra ende til anden! Listen starter
> jo ved 1 så det er Talt!
>
> Repeat - Until funktionen er en rimelig nem løkke at bruge!
>
> Vi checker om Name = SoegtNavn og om Bande = SoegtBande Og hvis det
matcher
> så skal fundetPost variablen være sand!
>
> Bagefter - ikke indeni - Checkes om FundetPost er sand - Hvis den er sand
> skal posterne rokeres en tand ned efter tur!
>
> Til sidst skal Antallet af registrerede personer nedtælles med den ene som
> børge var!
>
> Listen løbes kun igennem en gang så der er ikke det store tidsforbrug!
>
> Det er en lignende process når der skal indsættes en ny person og posterne
> altså skal sorteres i forbindelse med indtastningerne! Også her løbes
løkken
> kun igennem en gang!
>
> Det er noget andet hvis den skal sorteres efter noget tids usorteret
> indtastninger!
>
> Jeg håber det kan hjælpe dig!
>
> Mvh. Heinrich
>
>
> ---
> Denne mail er certificeret virusfri
> This mail is certified Virus Free.
>
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.502 / Virus Database: 300 - Release Date: 18-07-2003
>
>



Heinrich Christianse~ (28-07-2003)
Kommentar
Fra : Heinrich Christianse~


Dato : 28-07-03 14:37

Hej igen Torben!

> Hvis vi nu forudsætter at til at starte på, så består Olsen banden af 0
> medlemmer. Så kommer Egon til verden og han stiller sig mit på en pløje
mark

Det er kun naturligt! Jeg gætter på at du vil gerne have lidt hjælp til
indtastning af nye medlemmer?!?

> sig for at afgøre diverse tvistigheder ved at spille "Medal of Honor".
> Derfor indtaster Gud en række felter i recorden. Felter som "PistolKill"
og
> "PistolDeath", disse felter er tomme da banden først skal have deres
første

Du kan sagtens sætte flere felter ind i din Record! Det gør ingen forskel på
Børges situation!

Jeg har kontaktet dig via alm. email og tilføjet dig i min MSN Messenger!

Hvis du vil have yderligere hjælp skal jeg gerne hjælpe!

Jeg er selv gammel i gårde mht. programmering! Basic, Comal-80, Pascal,
Delphi og en smule Assembler!

I svaret du gav til den anden person med .INI filen fik jeg jo at vide at du
programmerer via Pascal! Hvilken version?

Mvh. Heinrich

NB: Jeg vil prøve at lave et programforslag til dig som du så kan studere!



---
Denne mail er certificeret virusfri
This mail is certified Virus Free.

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.504 / Virus Database: 302 - Release Date: 24-07-2003



Harald (27-07-2003)
Kommentar
Fra : Harald


Dato : 27-07-03 19:42

"Torben Jørgensen" <vilfert@hotmail.com> skrev i en meddelelse
news:bg1284$1neh$1@news.cybercity.dk...
> Damm Drenge
> Det er lige før at jeg går igang igen hehe. Takker meget for eksemplet
> Heinrich!! Men hvis, vi "leger" at der på nuværende tidspunkt er blevet 15
> medlemmer af Olsen Banden og medlem nr 8, dvs. Børge. Børge har været i
> Yvonnes hash kager og derfor har Egon besluttet sig for at smide Børge ud
af
> banden, dvs. han skal slettets af listen. Så hvordan finder jeg hele
Børges
> record og sletter den, helst uden at efterlade blanke pladser i
rækkefølgen?

Ja ved at benytte en ini fil (TInifile) kunne det klares med en enkelt linie


StatsIni.EraseSection('Børge');

Mvh
HK



Torben Jørgensen (27-07-2003)
Kommentar
Fra : Torben Jørgensen


Dato : 27-07-03 23:22

Hej Harald
Hihi, de viser bare, hvor meget mere du har tjek på Delphi end jeg. Vi havde
godt nok en introduction til Delphi på datamatikkeren, men det var
gammeldags Pascal vi lærte. Skal jeg nogen sinde lave noget mere
programmering så skal jeg helt klart have sat mig grundigt ind i moderne
Delphi og ikke programere på gammeldags Pascal facon.

Dit input er meget værdsat
Torben

> Ja ved at benytte en ini fil (TInifile) kunne det klares med en enkelt
linie
>
>
> StatsIni.EraseSection('Børge');
>
> Mvh
> HK
>
>



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste