Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard
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)