Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array: Maximale Anzahl nicht festlegen (https://www.delphipraxis.net/25675-array-maximale-anzahl-nicht-festlegen.html)

yankee 10. Jul 2004 11:09


Array: Maximale Anzahl nicht festlegen
 
Seit mir bitte nicht böse, dass ich das frage. Als ich aray in der Suche eingegeben habe, kamen mir direkt 40 Seiten Suchergebnisse entgegen. Die erste Seite habe ich noch durchsucht, aber 40...

Ich habe jedenfalls einen Record:
Delphi-Quellcode:
  TArbeit =record
    datum :String;
    von :integer;
    nach :integer;
    zeit :integer;
  end;
Und möchte einen Array davon. Da ich den Array aus einer Textdatei einlesen möchte ergibt sich das Problem, dass diese Deklaration:
Arbeit :array[0..100] of TArbeit;
unzireichend ist, weil ich nicht weiß, wieviele Einträge die Textdatei hat. Dazu kommt noch, dass ich die Array verändere und welche lösche und hinzufüge. Daher meine Frage:
Kann man Arrays quasi "dynamisch" erzeugen??

CalganX 10. Jul 2004 11:10

Re: Array: Maximale Anzahl nicht festlegen
 
Hi,
das Stichwort lautet ... *tata* ... Hier im Forum suchenDynamische Arrays. ;)

Chris

Christian S. 10. Jul 2004 11:14

Re: Array: Maximale Anzahl nicht festlegen
 
Hi!

Ja, das geht! Und den Namen hast Du auch schon richtig erraten: "dynamische Arrays".

Die Deklaration sieht so aus:
Delphi-Quellcode:
var
  myArr : Array of Integer;
Und die Größe legst Du so fest:
Delphi-Quellcode:
  SetLength(myArray, 10);
Damit hat das Array dann Elemente von 0 bis 9.

ABER: Rufe SetLength so wenig wie möglich auf! Es kann unter Umständen viel Speicher fressen und das Schnellste ist es auch nicht.

Ich habe hier ein Tutorial veröffentlicht.

MfG
Peter

SirThornberry 10. Jul 2004 11:20

Re: Array: Maximale Anzahl nicht festlegen
 
Nimm lieber TList anstelle von Arrays, das ist wesentlich schneller

semo 10. Jul 2004 11:26

Re: Array: Maximale Anzahl nicht festlegen
 
kann SirThornberry nur zustimmen...

lade ein Datenpaar aus der Datei in eine Variable vom Typ TARbeit
und hänge diese Variable dann der Liste mit myList.Add(variable) an.

dann springst du weiter zum nächsten Paar usw...

--> ne simple Schleife :wink:

ist sauberer als mit dynamischen arrays zu arbeiten!

yankee 10. Jul 2004 12:10

Re: Array: Maximale Anzahl nicht festlegen
 
mhh. TList? Never heard... Such nach TList konnte mein wissen nicht erweitern. Kann mir das jemand kurz erklären?

Mirilin 10. Jul 2004 13:31

Re: Array: Maximale Anzahl nicht festlegen
 
:hi:

Hier hab ich Dir einen Link zu einem Tutorial zu TList :)



mfg Tobias

semo 10. Jul 2004 13:39

Re: Array: Maximale Anzahl nicht festlegen
 
wie der name schon ausdrückt: eine liste..

genauer: eine Liste von objekten bzw Pointern

yankee 10. Jul 2004 17:25

Re: Array: Maximale Anzahl nicht festlegen
 
Oh gott... Ich verstehe mal wieder nur airport...
Also auf der Suche danach herauszufinden, wo der Unterschied zwischen ner Variable mit Pointer (fängt schon damit an, dass ich nicht wirklich ganz genau weiß, was ein Pointer ist) herauszufinden, bin ich auf diesen Thread gekommen.
Nun habe ich verstanden, dass eine Variable ohne pointer weniger Platz im RAM braucht. Außerdem ist die "Bedienung" mit Pointern viel komplizierter, denn man muss immer mit new(Variable); erst irgendwas machen. Da erscheint mir die Variable ohne Pointer so spontan besser...
Was mache ich denn jetzt :?: :cry: :?

yankee 10. Jul 2004 20:15

Re: Array: Maximale Anzahl nicht festlegen
 
Schon gut... Ich habe durch Zufall etwas gefunden, was wohl viel besser hgeeignet ist: Dies hier
Trotzdem danke für eure Hilfe!!!

mirage228 10. Jul 2004 20:18

Re: Array: Maximale Anzahl nicht festlegen
 
Zitat:

Zitat von yankee
Schon gut... Ich habe durch Zufall etwas gefunden, was wohl viel besser hgeeignet ist: Dies hier
Trotzdem danke für eure Hilfe!!!

Hi,

das ist eine Möglichkeit.

Bedenke jedoch, dass in .NET (un-)typisierte Dateien nicht mehr unterstützt werden, da die Record-Größe in .NET je nach Zielplattform verschieden ist.

mfG
mirage228

yankee 10. Jul 2004 20:23

Re: Array: Maximale Anzahl nicht festlegen
 
Zitat:

Zitat von mirage228
Bedenke jedoch, dass in .NET (un-)typisierte Dateien nicht mehr unterstützt werden, da die Record-Größe in .NET je nach Zielplattform verschieden ist.

Jo, das stört mich nicht, da ich nutze kein .NET. Ich stehe da eher auf der Seite der OpenSourceler...
Aber trotzdem würde mich mal interessieren, warum die recordgrößen sich da ändern sollten???

Chewie 11. Jul 2004 10:30

Re: Array: Maximale Anzahl nicht festlegen
 
Zitat:

Zitat von yankee
Aber trotzdem würde mich mal interessieren, warum die recordgrößen sich da ändern sollten???

Viele Datentypen sind von der Rechnerarchitektur abhängig. Auf einem 32Bit-Rechner ist z.B. ein Integer 32 Bit, also 4 Byte, groß. Auf einem 64Bit-Rechner wäre ein Integer aber 64 Bit groß!

yankee 11. Jul 2004 16:17

Re: Array: Maximale Anzahl nicht festlegen
 
ahsö...
Aber wenn ich 'ne Integerveraiable in 'ner Textdatei speichere, ändert die sich doch nicht...
Wenn ich was größeres als 2 147 483 647 reinschreibe, dann versteht da nur ein 64bit-System, es sei denn ich verwende 64-Bit Variablen (das funzt ja auch irgendwie auf 'nem 32bit system, muss der ja nur irgendwie konvertieren...
Also wenn ich 32bit schreibe, läuft das auch auf 64bit. Lässt sich also kompatibel schreiben. Richtig????

Chewie 11. Jul 2004 16:23

Re: Array: Maximale Anzahl nicht festlegen
 
Wenn du einen 32Bit-Integer in eine Datei schreibst, ist diese 32 Bit groß. DAs gleiche Programm auf einem anderen Rechner will die Datei lesen, geht aber von einer Größe von 64 aus. Dadurch liest es völlig falsche Daten.

yankee 11. Jul 2004 16:29

Re: Array: Maximale Anzahl nicht festlegen
 
Also wenn ich eine Textdatei habe, die so aussieht:
Code:
Zahl1:3
Zahl2:15
Welche Zahl ist 32bit und welche 64? Kannst du das Unterscheiden? Kann der Computer das Unterscheiden?

Chewie 11. Jul 2004 17:25

Re: Array: Maximale Anzahl nicht festlegen
 
Wenn du eine reine Textdatei hast, dann ist die Zahl im Text hinterlegt. Dort macht es keinen Unterschied. Es ging aber um typisierte Dateien, dort werden ja Records gespeichert.

So langsam könnte das mal ein eigenes Thema werden... :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz