Wie kann ich einen neuen Eintrag zu einem Array hinzufügen - Seite 2

 
pennyhunter #:

Junge junge, das ist ja schon wieder über eine Woche her.

Oh ja natürlich, da ist mir ein Fehler unterlaufen. Egal ob es nun arraysize oder array_size heißt, wenn es die selbe Variable sein soll, dann ist die Hauptsache dass es den gleichen Namen hat. Leider verliere ich gerne mal den Überblick weil ich von der Aufmerksamkeinsspanne nicht dazu gemacht bin, mir einen Haufen Variablen Buchstaben für Buchstaben zu merken. Ich verbuche das als Beweis, dass ich ein Mensch bin. Habe mir außerdem sagen lassen, dass 70% der Arbeit eines Programmierers im Debugging besteht. Es gibt Mittel und Wege, diesen Wert zu drücken (Code ReUse mittels Funktionen), aber Sachen aus dem Stehgreif zusammenschustern gehört leider nicht dazu.


Geht es denn jetzt?

Hallo @pennyhunter

Danke, jetzt hab ich das Zusammenspiel an der Stelle geschnallt. Nur noch abschließend um das ganze Thema auch behandelt zu haben. Am Ende füge ich dann neue Wert so ein?

//hole die aktuelle Größe des Arrays
int array_size=ArraySize(my_trend_array);

//Vergrößere das Array um +1 für 1 neuen Eintrag
ArrayResize(my_trend_array,array_size+1);

//Fülle nun die Werte in die Struktur
my_trend_array[array_size+1].id=2;
my_trend_array[array_size+1].time="test2";
my_trend_array[array_size+1].trend="trend2";
 
ReLor #:

Hallo @pennyhunter

Danke, jetzt hab ich das Zusammenspiel an der Stelle geschnallt. Nur noch abschließend um das ganze Thema auch behandelt zu haben. Am Ende füge ich dann neue Wert so ein?

Im Prinzip ja, aber es kommt darauf an ob Du ArraySetAsSeries für das Array als true oder false gesetzt hast. Wenn es true ist, musst Du den neuesten Wert immer bei 0 einsetzen und die anderen Werte vorher mit einer Schleife in die Vergangenheit verschieben.

Aber versuch mal selbst rauszukriegen wie das geht, einfache Schleife und Array als Buffer mit Zeitreihe, Suchfunktion benutzen, Dokumentation zu den einzelnen Themen anschauen. Überleg Dir wie Du überprüfen kannst ob es funktioniert, anzeigen lassen, debuggen usw.

Wenn Du wissen willst wie geht eine Schleife Buffer oder Array, dann nutz die Suchfunktion und such die Sachen in Dokumentation. Und Schau Dir auch mal die Artikel an, die Dir schon in deinen Fragenthreads empfohlen wurden.

 
pennyhunter #:

Im Prinzip ja, aber es kommt darauf an ob Du ArraySetAsSeries für das Array als true oder false gesetzt hast. Wenn es true ist, musst Du den neuesten Wert immer bei 0 einsetzen und die anderen Werte vorher mit einer Schleife in die Vergangenheit verschieben.

Aber versuch mal selbst rauszukriegen wie das geht, einfache Schleife und Array als Buffer mit Zeitreihe, Suchfunktion benutzen, Dokumentation zu den einzelnen Themen anschauen. Überleg Dir wie Du überprüfen kannst ob es funktioniert, anzeigen lassen, debuggen usw.

Wenn Du wissen willst wie geht eine Schleife Buffer oder Array, dann nutz die Suchfunktion und such die Sachen in Dokumentation. Und Schau Dir auch mal die Artikel an, die Dir schon in deinen Fragenthreads empfohlen wurden.

Danke!
 
Ich muss leider nochmals zum Thema kommen. Da ich die Fehlermeldung "Array out of range" erhalte und aktuell nicht verstehe / erkenne warum.

Folgendes mache ich.

struct my_array_struc
{  
   //Definiere die Struktur
   int      field1;    
   int      field2;    
   double   field3;    
   //...etc.  
   
};

//Erstelle das Array und weise die Struktur zu
my_array_struc my_array[]; 


//Das Array soll am Anfang leer sein!

//Dann kommt der erste Eintrag hinzu

        //Jetzt erweitere ich die Größe des Arrays
        int asize=ArraySize(my_array)+1;
        Print("ArraySize:",ArraySize(my_array)," asize:",asize); // Ergibt 0 bzw. 1
        ArrayResize(my_array,asize);
        

        //Jetzt targe ich die neuen Werte ein             
        my_array[asize].field1=123;
        my_array[asize].field2=456;
        my_array[asize].field3=789;
                    
und nun erhalte ich die Meldung "Array out of Range" - woran liegt das? Was mache ich immer noch falsch?
 
Ein Array der Größe n läuft von [0] .. [n-1], der Zugriff auf [n] ist daher ein zu weit und führt zu dem Fehler.
 
Carl Schreiber #:
Ein Array der Größe n läuft von [0] .. [n-1], der Zugriff auf [n] ist daher ein zu weit und führt zu dem Fehler.
Wenn ich Dich richtig verstehe ist das Problem, dass ich nicht bei 0 sondern bei 0+1=1 anfange das Array zu befüllen.

Ich habe dann folgendes einbaut
int asize=0;
if(ArraySize(my_array)>0){ asize=ArraySize(my_array)+1; }
das Ergebnis des Fehler "Array out of range" bleibt aber bestehen.

Habe ich Dich falsch verstanden?
 
Lies: https://www.mql5.com/de/articles/567 // Grundlagen der Programmierung in MQL5: Arrays
Grundlagen der Programmierung in MQL5: Arrays
Grundlagen der Programmierung in MQL5: Arrays
  • www.mql5.com
Arrays sind zusammen mit Variablen und Funktionen ein wesentlicher Bestandteil so gut wie jeder Programmiersprache. Dieser Beitrag dürfte vor allem für Neueinsteiger in der Programmierung mit MQL5 interessant sein, bietet erfahrenen Programmierern aber gleichzeitig eine gute Gelegenheit, ihr Wissen zusammenzufassen und zu systematisieren.
 
Hallo Carl, vielen Dank für den Link, aber diese Seite habe ich mir heute schon x-fach angesehen. Entweder bin ich blind oder es fehlt mir sonst was aber ich finde nicht den Part der mir das simple Thema erläutert!?

Habe ich dich richtig verstanden mit deinem vorangeganenen Post oder spieltest du auf etwas anderes an?
 
ReLor #:
Hallo Carl, vielen Dank für den Link, aber diese Seite habe ich mir heute schon x-fach angesehen. Entweder bin ich blind oder es fehlt mir sonst was aber ich finde nicht den Part der mir das simple Thema erläutert!?

Habe ich dich richtig verstanden mit deinem vorangeganenen Post oder spieltest du auf etwas anderes an?

Was ist so schwer zu verstehen am aller ersten Beispiel aus dem Artikel:

double Variable[3];

Variable[0]=1;
Variable[1]=2;

Variable[2]=Variable[0]+Variable[1];

Ein Array der Größe drei hat drei gültige Indices 0,1,2.

 
Das ist in der Tat nicht so schwer, ein bisschen Grips bringe ich schon mit, auch als Newbie.

Ich versteh dennoch nicht wieso die Fehlermeldung kommt.

Wenn ich ein leeres Array mit 0 beginne zu indixieren, dürfe es doch gar nicht zu diesem Fehler kommen!?

Wenn ich das Array wie folgt in der Größe definieren möchte erhalte ich jedoch die Meldung "declaration without type" - vielleicht hängt es ja damit zusammen, bislang hatte ich auf den folgenden Code verzichtet weil ich annahm, dass ich dass (siehe oben) später machen könne..!?

"ArrayResize(my_array, 0);"

Nachtrag

Die Fehlermedung kam wohl daher, dass ich falscher Weise ArrayResize im globalen Gültigkeitsbereich versucht hatte auszuführen, was wohl nicht geht. Nun führe ich es an passender Stelle aus und es geht auch ohne Fehlermeldung durch. Meine grundsätzliche Fehlermeldung mit "out of range" bleibt aber beharlich bestehen.


Wenn ArraySize =0 ist und ich dann mit 0 beginne, warum bin ich dann direkt "out of range" - das kapiere ich nicht...