Avatar billede koden12 Nybegynder
10. september 2003 - 12:04 Der er 4 kommentarer og
2 løsninger

Record er altså begrænset

Så jeg kan altså konstanterer efter mange DAGES søgen på nettet at Record i Delphi er begrænset af det MAX Array man laver da de skal indlæses i mem og derfor er begrænset.


TYPE Record
Hest : String
og så videre..

hesterecord maxarray  [0...2000)

Mere kan den ikke ?
Jeg så en CASE sætning der læste (lidt af en af hver) noget af en ind ad gangen men det var også det nærmeste.
Har jeg ret ?
VH
SprøgerJørgen
Avatar billede zogu Nybegynder
10. september 2003 - 12:13 #1
Ehhh, du kan lave en pointer til din record og lave en hægtet liste.

TYPE
  Pliste = ^liste;
  liste = Record
      Hest : String;
      Next : Pliste;
      Prev : Pliste;
  end;

Var
  ListeStart : PListe;
  CurrentList : Pliste;

Begin
  ListeStart := New(Liste);
  ListeStart.Prev := Null;
  ListeStart.Next := Null;

  CurrentList := ListeStart;
  CurrentList.Next := New(Liste);
  CurrentList.Next.Prev := CurrentList;
  CurrentList := CurrentList.Next;
  CurrentList.Next := Null;
End.

Her opretter jeg 2 reccords i en dobbelt hægtet liste.


Nu kan du oprette en ny record adhoc med new.
Avatar billede zerohero Nybegynder
10. september 2003 - 13:04 #2
Så vidt jeg ved er arrays i virkligheden pointers til forskellige steder i hukommelsen. Så i teorien burde du kunne lave så mange arrays som Windows nu tillader at give din applikation af hukommelse. Dog er det vel meget tænkeligt at der er en grænse (max) ligesom som der er med alle andre typer: Double, Extended, Real, Single, Integer, DWord, Word osv. (Læs eventuelt i hjælpefilen omkring yderlig detaljer). Da intet er ubegrænset i en komputer kan der selvfølig bruges kreativiteten som våben. Bare lav en Array der indeholder andre Arrays det vil dermed forøge antallet af mulige Arrays! Hvis det da ellers giver menning.

Held og Lykke
ZeroHero
Avatar billede tolderlund Nybegynder
10. september 2003 - 13:38 #3
Det er overhovedet ikke begrænset, du skal bare bruge en dynamisk array.
var
  hesterecord: array of DitRecordNavn;
begin
  SetLength(hesterecord, AntalRecords);  // index går fra 0 til Antal-1
SetLength kan du bruge så tit du vil, indholdet i arrayen beholdes sålænge du udvider arrayen. Du skal bare være opmærksom på at der skal allokeres hukommelse hver gang SetLength bruges, så det er smartest at udvide arrayen i klumper ad gange og ikke kun med en record ad gangen.
Avatar billede tolderlund Nybegynder
10. september 2003 - 13:39 #4
Okay, det er selvfølgelig begrænset hvor mange records man kan have, men det er begrænset af den mængde hukommelse maskinen har.
Avatar billede koden12 Nybegynder
10. september 2003 - 14:26 #5
Mange tak for jeres fine og gode svar.
Det er åbenbart noget det kan skille "De lærte" i 2 lejre..
Jeg har da fået noget at teste af nu : )
Men denne som jeg stratede med og som er begrænset kan altså laves ubegrænset ?
I Princippet !

Den så ca således ud :

{Address Record}
type
  TAddressRec = record
    First : String[20];
    Last  : String[20];
    Add1  : String[40];
    Add2  : String[40];
    City  : String[30];
    ST    : String[2];
    Zip  : String[10];
    Phone : String[20];
    Fax  : String[20];
  end;

{Direction Type}
type
  TRecMove = (recFirst, recLast, recNext, recPrev);


var
  Form1: TForm1;
  AddrFile  : File of TAddressRec;
  AddrRec  : TAddressRec;

const
  MAXRECS = 2000;

implementation
Avatar billede tolderlund Nybegynder
10. september 2003 - 14:33 #6
Den kode viser ikke så meget, kun din definition af recorden.
Det kommer også an på hvordan du bruger recorden i din kode om du har en begrænsning.
Men nu vi er ved record definitione, så vil jeg stærkt anbefale at du definerer den som:
type
  TAddressRec = packed record  // bemærk packed keyword
Ellers får du problemer med at læse filen pga. felt alignment hvis du på et tidspunkt skifter Delphi version.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging