[Delphi] Variabel-naam veranderen

Pagina: 1
Acties:

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Ik wil graag een variabel-naam veranderen in Delphi
Bij een while-loopje moet hij steeds een bepaalde waarde in een variabel zetten.

Zoiets:

i:=0;
while i < VariabeleWaarde do
begin
waarde1 := EenNaam;
end;

hij moet in plaats van waarde1, bij de 2e keer dat hij de compound statement uitvoert er waarde2 van maken. Hoe doe ik dit precies?

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

Array.

oogjes open, snaveltjes dicht


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Wat bedoel je nu precies. Wil je die variabele een waarde geven of de variabele hernoemen?

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
ik wil de waarde van een variabel nie veranderen, maar juist dat ik een array van gegevens krijg ja...

Noem eens het voorbeeldje zoals ik dat zou kunnen maken.
Array roepen is goed, maar kan beter :)

  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Eventjes snel uit m'n hoofd, want ik heb delphi nu niet geinstalleerd:
code:
1
2
3
4
5
6
7
8
9
var 
  varray[0..255]: of integer;
  i: integer;
begin
  variabelewaarde:=300;
  i:=0;
  
  while (i < VariabeleWaarde) do varray[i] := waarde;
end;

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:36
Array ... Delphi heeft zo'n mooie help-functie...

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

Tja, zelf doen kan ook beter. Wat is de vraag, hoe vul ik een array?

oogjes open, snaveltjes dicht


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09-09 21:25

Creepy

Tactical Espionage Splatterer

Uit je profile: Studierichting: Programmeur.

Pas erg kort bezig?
code:
1
2
3
4
5
var blaat: array[0..300] of string;
begin
for k:=0 to 300 do
    blaat[k]:='EenWaarde'
end;

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Uit de help van Delphi
code:
1
2
3
4
5
6
7
8
var
  A, B: array of Integer;
begin
  SetLength(A, 1);
  SetLength(B, 1);
  A[0] := 2;
  B[0] := 2;
end;

Je kan "A, B : array of Integer;" ook vervangen door "var A, B : array[1..100] of Integer;" en dan de twee regels "SetLenght" weglaten.

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Mijn probleem hier was, ik kon niet op de naam 'array' komen. Natuurlijk had ik het anders zelf op kunnen lossen, maar ik zat met PHP en Pascal in de knoei, met waardes toekennen aan een variabel.

Ik zat al te zoeken hier op GOT met

'Delphi var naam'

maar kreeg gewoon niet gevonden wat ik wou hebben.
Just for this simple case, tnx dat je niet meteen slotje erop hebt gedaan, het is ook zo'n noobyprobleem, maar ik kon niet op 'array' komen. Ik sla mezelf wel :)

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Ik heb nu zoiets:

PlayerName := PChar(P);
PlayerNames[i] := PlayerName;

De array is aangemaakt, maar de foutmelding is nu
Incompatible types: 'Char' and 'string'
Aan de eerste regel mag niets veranderd worden.
Ik declareer PlayerName als een string, en PlayerNames ook.
De array is ook een string.

Op zich niet zo verwonderlijk, maar
hoe kan ik dit fixen? het IntToStr ken ik bijvoorbeeld wel, maar wat is dit voor char to string ? In de help staat deze er niet bij.

Verwijderd

PlayerName := PChar(P);
PlayerNames[i] := PlayerName;
Wat is P? Integer? String? Waarom maak je er PChar van? Nogal wiedes dat Delphi erover gaat zeuren als PlayerName string is.

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Op vrijdag 12 april 2002 17:29 schreef TheOdyssey het volgende:

[..]

Wat is P? Integer? String? Waarom maak je er PChar van? Nogal wiedes dat Delphi erover gaat zeuren als PlayerName string is.
Nee, nee... Het gaat om die 2e regel :).
Hij zegt op een gegeven moment dat het geen string meer is, maar een Char.

Verwijderd

Weet je echt zeker dat die playernames een
array [......] of string
is? Niet stiekem toch een char-array, een pchar of iets van dien aard?

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Op vrijdag 12 april 2002 17:38 schreef TheOdyssey het volgende:
Weet je echt zeker dat die playernames een
array [......] of string
is? Niet stiekem toch een char-array, een pchar of iets van dien aard?
HELEMAAL bovenaan doe ik dit:
code:
1
2
    PlayerName: string;
    PlayerNames: string;

DAN krijg ik dit:
code:
1
2
3
4
5
6
function DecodeStream(P: Pointer): TDetails;
var
  i: integer;
  NullPos: Integer;
  PlayerNames: array[0..30] of string;
begin

blabla aan code
code:
1
2
    PlayerName := PChar(P);
    PlayerNames[i] := PlayerName;

Dit is m'n code

Verwijderd

Haal die
code:
1
    PlayerNames: string;

bovenaan eens weg...

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09-09 21:25

Creepy

Tactical Espionage Splatterer

P: Pointer?

Is dat een functie die door iets van C word aangeroepen ofzo? Voor de duidelijkheid kan je er beter van die p een pchar maken (is nog steeds een pointer dan)

Maar dan kan je meteen
code:
1
playernames[i]=string(p)

doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Deze stuctuur wil ik graag houden. Anders loopt het dadelijk brak. Hij loopt nu namelijk wel flex :)


Afbeeldingslocatie: http://www.cheater.nl/fout.jpg

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
eej Mensen...de fout is nog niet weg hoor... zie foto hierboven

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09-09 21:25

Creepy

Tactical Espionage Splatterer

Playernames[i]:=string(playername);

Eeehh... no offense hoor, weet niet precies waarmee je bezig bent, maaruh, is het misschien een idee om eerst nog wat Delphi te leren voordat je er mee verder gaat? Dit is namelijk er basic. En wat jij een het doen bent komt wat minder basic over :) (pointers.. voor verschillende mensen een moeilijk onderwerp..)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Ja ik snap het, maar voordat ik doorheb wat dit nou precies allemaal doet (sommige dingen snap ik er wel van, bijvoorbeeld het eroverheen springen, maar dat van PChar enzo zegt mij niets. )
maar voordat ik doorheb wat dit nou precies allemaal doet ben ik een jaar verder, en zo lang wil ik niet wachten. Aangezien wil ik niet opnieuw het wiel uitvinden, en alles wat je gebruikt is jatwerk.

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
.
.
---==== Probleem is opgelost ====---
.
.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 09-09 21:25

Creepy

Tactical Espionage Splatterer

Op vrijdag 12 april 2002 19:48 schreef Cheater het volgende:
Ja ik snap het, maar voordat ik doorheb wat dit nou precies allemaal doet (sommige dingen snap ik er wel van, bijvoorbeeld het eroverheen springen, maar dat van PChar enzo zegt mij niets. )
maar voordat ik doorheb wat dit nou precies allemaal doet ben ik een jaar verder, en zo lang wil ik niet wachten. Aangezien wil ik niet opnieuw het wiel uitvinden, en alles wat je gebruikt is jatwerk.
Dat is helaas wat veel mensen willen. Maar als je WEL weet wat je doet heb je maar mijn idee meer voldoening!

maar ja. je weet nu in elk geval wel :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 06:09

Tomatoman

Fulltime prutser

Hé Cheater, nog steeds bezig met het ophalen van gegevens van die game servers?

Delphi werkt sinds versie 2 met strings die maximaal 4 gigabytes lang kunnen zijn (eerst even wat RAM erbij prikken op je moederbord :)). Dit is het type string. Good old Delphi 1 uit de 16-bits Windows-tijd werkte met strings die maximaal 255 karakters lang konden zijn - dit type heet sinds Delphi 2 ShortString. De n-de letter van een string of ShortString kun je ophalen met MijnStringVariabele[n]. Daarbij begin je bij 1 te tellen, de eerste letter staat dus in MijnStringVariabele[1].

De lengte van een string of ShortString kun je uitvinden met Length(MijnStringVariabele). ALLEEN bij een ShortString staat in MijnStringVariabele[0] de lengte van die string.

Er is nog een derde variant: een ShortString waarvan je de lengte al bij het compileren vastlegt. Dat doe je als volgt: MijnStringVariabele: string[17] is een string met een vaste lengte van 17 karakters.

Samenvattend:
code:
1
2
3
4
5
6
7
var
  S1: string;   { Een string van willekeurige lengte. }
  S2: ShortString; { Een 'ouderwetse' string van maximaal 255
               karakters. Dit type zul je zelden of nooit 
               gebruiken. }
  S3: string[69];  { Een 'ouderwetse' string met een vaste lengte
               van precies 69 karakters. }

Waarom gebruik ik in de volgende record nou zowel gewone strings als ShortStrings?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TDetails = record
    ...
    NetAddress: string;
    HostName: string;
    MapName: string;
    ...
    case ModRunning: Boolean of
    False: ();
    True: (
      InfoURL: ShortString;
      FTPURL: ShortString;
      ...
      );
  end;

Ik gebruik natuurlijk zoveel mogelijk het type string, want dat werkt het eenvoudigst. Maar het variabele deel van een record (het gedeelte in de case-structuur) MOET van de compiler in zijn geheel een vaste lengte hebben. Dat kan met ShortStrings, want de compiler ziet dat gewoon als string[255] en reserveert voor zowel InfoURL als FTPURL in de recordstructuur 255 bytes.

Stel dat ik zou weten dat NetAddress maximaal 40 karakters lang zou zijn, MapName enorm lang, InfoURL maximaal 50 karakters en FTPURL maximaal 255 karakters. Dan zou ik mijn recordstructuur kunnnen ombouwen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  TDetails = record
    ...
    NetAddress: string;
    HostName: string;   // lengte wordt automatisch aangepast
    MapName: string;
    ...
    case ModRunning: Boolean of
    False: ();
    True: (
      InfoURL: string[50];
      FTPURL: ShortString;   // of FTPURL: string[255];
      ...
      );
  end;

Ondanks dat ik weet dat HostName maximaal 40 karakters lang is, maak ik er geen string[40] van. Reden 1: een string[40] gebruikt ALTIJD 40 bytes geheugen ongeacht de werkelijke lengte van de string. string gebruikt altijd het werkelijk benodigde geheugen, afhankelijk van de werkelijke lengte van de string - in dit geval 40 bytes of minder. Reden 2: string is het standaardtype in Delphi voor strings, je werkt er gemakkelijker mee dan met alle andere typen strings en je code is het makkelijkst leesbaar >:).

Een goede grap mag vrienden kosten.


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 14:04
Hiero een screenie van zoals ik het nu heb:

Afbeeldingslocatie: http://www.cheater.nl/screens/players.jpg
.
Afbeeldingslocatie: http://www.cheater.nl/screens/scores.jpg

TotalTime is een SINGLE. Ik wil het graag in een caption hebben. Hoe kan ik dit oplossen?

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

Ik snap niet dat je nu best een aardig programmaatje hebt, en toch geen single naar een string kan converteren. Er zit een help functie bij Delphi, en met een beetje gekloot kom je er makkelijk zelf achter. Maar goed. FloatToStr.

oogjes open, snaveltjes dicht

Pagina: 1