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 Detlef - 31.10.2020 8:26)
Als Antwort auf Re: Array Datensatz kopieren von André H. - 30.10.2020 17:26
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo André,

vielen Dank fĂŒr Deine UnterstĂŒtzung! Das war genau das, was ich gebraucht habe.

Das Vorgehen mit den Arrays habe ich nun verstanden. Ja, ich brauche sie so, wie Du es beschrieben
hast. Die Definition passe ich jetzt bei mir mal an.

Die Inline Copy Funktion kann ich so ĂŒbernehmen?

Ich bastele jetzt mal eine AnfĂŒge, Lese und Löschfunktion und komme mit dem Ergebnis
oder weiteren Problemen dann wieder hier vorbei!

Schönes Wochenende,

Detlef



> 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
> >  
> >
> >
> >
> >
> >


    Antwort schreiben


Antworten: