Projekt mit
1 €
unterstützen?
So geht das *:


Step 07 - Arrays & Records

Author: Nicolai B.

Arrays:

Ein Array ist eine statische Liste, welche Werte eines vorbestimmten Types enthalten kann. Das ganze stellt man sich am besten so vor: Man hat eine Straße (=Array) mit gleichen Häusern (=Typ), aber anderen Familien (=Werte) und natürlich anderen Hausnumern. Die Hausnummern bilden die Indizes, über welche man auf die Werte zugreifen kann. Der Index eines Arrays beginnt normalerweise bei "0" und wird in eckigen Klammer dargestellt:

myarray[0];

Name des arrays ; Index des Arrays ;

Einem Array wird ein Wert, wie bei einer Variable, zugewiesen.
Es gibt zwei verschiedene Arten von Arrays, statische Arrays und dynamische Arrays.

Ein statisches Array ist ein Array mit einer bestimmten Größe. Es wird wie folgt deklariert:

var myArray : Array[0..4] of Interger ;

Name des Arrays ; Größe des Arrays ; Typ des Arrays

Die Größe kann bei diesem Beispiel während der Laufzeit nicht verändert werden.
Initialisiert wird das Array dann beispielsweise so:

  myArray[0]:=0;
  myArray[1]:=0;
  myArray[2]:=0;
  myArray[3]:=0;
  myArray[4]:=0;

Dynamische Arrays werden wie die statischen Arrays nur ohne die Größenangabe deklartiert:

var myArray : Array of Interger ;

Name des Arrays ; Typ des Arrays

Die Größe eines dynamischen Array kann man während der Laufzeit ändern:

SetLenght( myarray , 10 );

Name des Arrays ; Neue größe des Arrays ;

Initialisiert wird das dynamische genauso wie das statische Array.

Beispiele für Lazarus gibt es bisher noch nicht. Bei Delphi funktioniert das aber genauso. Deswegen kann gerne der Step 11 (For-Schleife) von Delphi angeschaut und bearbeitet werden. Fragen dazu können auch gerne hier gepostet werden.

 

Records:

Records sind eine Art Verbund von mehreren Elementen.
Diese Elemente, die Variablen nicht unähnlich sind, können von verschiedenen Datentypen sein.
Hier die Deklaration und Initialisierung:

procedure TMainForm.BtnDemoClick(Sender:TObject);
type 
  TAdresse = record 
    Vorname: String; 
    Nachname: String; 
    Strasse: String; 
    Hausnmr: Integer; 
    Ort: String; 
    PLZ: String; 
  end; // of Record

var
  tmpAdr : TAdresse;
  AdressenArray : Array[0..4] of TAdresse;
  // Beinhaltet insgesammt 5 Adressen!

begin
  // Initialisierung des Adressen-Arrays
  AdressenArray[0].Vorname:='Klaus';
  AdressenArray[0].Nachname:='Walter';
  // ...

  AdressenArray[4].Ort:='Klaustal';
  AdressenArray[4].PLZ:=54321;
end;

Die "Typdeklaration" besteht aus dem Schlüsselwort "type" und anschließend fast genauso, wie wir es bei der Variablendeklaration kennengelernt haben.
(Wichtig ist "=" anstatt ":" und "end;" anstatt ";"!)
Der Vorteil hierbei ist, dass man mehrere "Instanzen" von diesem Typ bilden kann, wie man es mit Variablen bereits gewohnt ist, weshalb normalerweise nur die Methode 2 genutzt wird.

Nun haben wir den Typus "Record" bereits kennengelernt.
Am Ende im Abschnitt OOP werden wir eine weitere Art von "type" kennenlernen.

 

Hier eine fortgeschrittene Demo, was man mit dem "Type" Record schönes machen kann:

Hierfür braucht ihr auf dem Formular:
  • 4 Buttons
  • 16 Edits
  • 16 Labels

// das hier in den Interface-Bereich direkt bei type
type
  TICQNmbr = record
    Nick : String[10]; // die Zahl in den Eckigen Klammern gibt die

    Name : String[10]; // maximale Größe des "Strings" an!
    Surname : String[12];
    UIN : Integer;
  end;
  
  T4ICQContacts = Array[0..3] of TICQNmbr;




// das hier in den privat-Abschnit des TMainForms
  
  ICQNmr : T4ICQContacts;



// das hier in die Click-Procedure des Buttons,
// der die Eingaben übernehmen soll:

begin
  ICQNmr[0].Nick:=EdNick1.Text;
  ICQNmr[0].Name:=EdName1.Text;

  // ... copy & paste ;-)

  ICQNmr[3].Surname:=EdSurname4.Text;
  ICQNmr[3].UIN:=StrToInt(EdUIN4.Text);
end;



// das hier in die Click-Procedure des Buttons,
// der die geladene Eingaben anzeigen soll:

begin
  EdNick1.Text:=ICQNmr[0].Nick;
  EdName1.Text:=ICQNmr[0].Name;

  // ... copy & paste ;-)

  EdSurname4.Text:=ICQNmr[3].Surname;
  EdUIN4.Text:=IntToStr(ICQNmr[3].UIN);
end;



// das hier in die Click-Procedure des Buttons,
// der alles speichern soll:

var
  f : file of T4ICQContacts;

begin
  AssignFile(f,'C:\demofile.dat');
// Achtung: Vistanutzer nehmen bitte am einfachsten das Programmverzeichnis als Speicherort:
// AssignFile(f, ExtractFilePath(Application.Exename) + 'demofile.dat');
// ExtractFilePath(Application.Exename) extrahiert, wie der name schon sagt, den Pfad des Programmes
  ReWrite(f);
  Write(f,ICQNmr);
  CloseFile(f);
end;



// das hier in die Click-Procedure des Buttons,
// der alles laden soll:

var
  f : file of T4ICQContacts;

begin
  AssignFile(f,'C:\demofile.dat');
// Achtung: Vistanutzer nehmen wieder das Programmverzeichnis als Speicherort:
// AssignFile(f, ExtractFilePath(Application.Exename) + 'demofile.dat');
  ReSet(f);
  Read(f,ICQNmr);
  CloseFile(f);
end;

Download Demoprogramm (remake)


Kommentar des Webmasters:
Dieses Tutorial hat Nicolai B. in Eigenregie vorbereitet, programmiert und damals in der AG vorgetragen. Er hat hier das Thema File-Handling, was erst später im Fortgeschrittenen-Bereich näher gezeigt wird, vorausgenommen. Wer hierzu mehr erfahren möchte, kann gerne hier weiterlesen. Für den Lazarus-Bereich habe ich die Demo in Lazarus übersetzt, was nicht schwer war:

1. Neues Projekt öffnen
2. Formular genauso aufbauen und Objekte gleich benennen.
3. Quelltext von der MainUnit der Original-Demo Methode für Methode kopieren.
Wichtig dabei ist, dass man erstmal leere Methoden über das Formular erstellt. (Doppelklick auf den Button)
Genauso darf TICQNmbr und T4ICQContacts sowie die Deklaration von ICQNmr nicht vergessen werden!

Vielen Dank nochmals an Nicolai B. für diesen Beitrag!


Da das Kommentarmodul dieser Seite zur Zeit neu überarbeitet werden muss, sendet bitte alle Fragen, Anregungen oder Probleme mit Betreff zu welchem Thema es sich handelt an folgende Mailadresse:




www.marco-hetzel.de
www.delphi-lernen.de
www.lazarus-lernen.de

© 2006-2019 by Marco Hetzel , last modified 01.11.2018, 11:28

(* Unterstützung dient der Aufrechthaltung laufender Kosten für dieses Projekt.)