Re: Array Datensatz kopieren Kategorie: Programmierung (von André H. - 30.10.2020 17:26) | ||
Als Antwort auf Array Datensatz kopieren von Detlef - 29.10.2020 8:25 | ||
| ||
Hallo Detlef, wenn nicht unbedingt erforderlich, sollte man nicht ständig umkopieren, sondern eher ein Index-Array erstellen in denen nur die Indizies sortiert werden. Aber nun erstmal Punkt für Punkt: Die Definition des eigenen Datentyps. Du hast einen Datentyp Datensatz definiert, der vier Arrays mit jeweils 50 Elementen hat. Ich denke, da� Du das so nicht definieren wolltest, sondern ein Datensatz je ein Feld time, aktor, modi und wert haben soll. Dvon dann 50 Datensätze. Die Definition mu� dann folgenderma�en aussehen: type Datensatz { long time; int aktor; int modi; int wert; } Datensatz test[50]; Der nächste Punkt ist das Kopieren von eigenen Datentypen. Das geht leider nicht mit einfacher Zuweisung. Für das OS sind eigene Datentypen einfach nur Arrays. Zum Kopieren mu� man die Funktion copypos des Moduls mem.c2 etwas mi�brauchen, indem man eine eigene Funktion zusammenstellt. Das würde dann so aussehen: inline function copyDatensatz ( Datensatz dest[], int destpos, Datensatz src[], int srcpos, int len ) { inline vmcodes.VM_INLINE_SYSCALL+mem.Segment; inline mem._COPY; } Beim Aufruf mu� man aber etwas rechnen oder eine Hilfsfunktoin verwenden. Ein Datensatz besteht hier aus 10 Byte. (long(4) + 3x int(2)) Will man nun test[25] auf test[20] kopieren, schaut das so aus: copyDatensatz(Datensatz, 20*10, Datensatz, 25*10, 10); Wichtig dabei ist immer, da� hier in Byte gerechnet werden mu�. Als Anmerkung: Bei zusammengesetzten Datentypen - besonders bei mehr Mehrdimensionalen - immer auf die Grö�e achten. "Datensatz" ist eindimensional und hat hier 500 Byte, also kein Problem. Statt nun im Array selbst umzukopieren kann man sich auch ein Index-Array anlegen, welches man zum Sortieren nutzt. Der Vorteil ist, wenn man verschiedene Sortierungen benötigt, mu� man nicht immer am Datensatz umkopieren, sondern man kann verschiende Index-Arrays nutzen. Datensatz test[50]; // 50 Datensätze byte Index[50]; //Arrays mit Index-Positionen, je nach Sortierung Wir brauchen hier zwar 50 Byte mehr RAM, sind aber flexibler in der Nutzung. Unsortiert weisen wir Index[] die Werte 0 bis 49 als Initialisieung zu: for i = 0 ... 49 Index[i]=i; Der Zugriff auf Datensatz erfolgt immer so: Datensatz[Index[Position]] Wenn nun Position 25 mit 20 getauscht werden soll, braucht man die Werte nur Index zuweisen: Index[20]=25; Index[25]=20; Und schon sind die Positionen bei Zugriff über Datensatz[Index[Position]] getauscht. MfG André H. > Guten Morgen! > > Ich habe mal Zeit für eine Optimierung der Haussteuerung und bräuchte etwas Unterstützung. > > Ich möchte "datenbankähnlich" Einträge in einem Array sortieren/indizieren. > > Dazu habe ich zwei Fragen: > > 1. Hat sich jemand damit schonmal befasst? > > 2. Folgende Detailfunktion würde mich schon weiterbringen: > > > Type Datensatz > { long time[50]; > int aktor[50]; > int modi [50]; > int wert [50]; > } > > Datensatz test; > > function copy() > { > test[20] = test[25]; // ich möchte also einen DS im Array "test" an eine andere Position kopieren > > } > > > > > Für konstruktive Hilfe wäre ich sehr dankbar. > > Beste Grü�e > > Detlef > > > > > > Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: Array Datensatz kopieren (von Detlef - 9.11.2020 18:22) Re: Array Datensatz kopieren (von Detlef - 31.10.2020 8:26) |