Einzelnen Beitrag anzeigen
  #5 (permalink)  
Alt 10.04.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard Zwischenstand

Danke für Eure Antworten. Dummerweise kann MT keine string arrays sortieren, dazu kommt, daß nur die erste Dimension sortiert wird.

Erst mal habe ich rausfinden müssen, wie man die x-te Dimension sortieren kann, das sieht bis jetzt so aus:
Code:
void OnStart()
{
   // === an array can ONLY be sorted IN FIRST DIMENSION
   // === the 1st dimension is free (in output its value is Zero)
   int SeondDataArray[5][3]={{,7,3},
                             {,3,1},
                             {,57,14},
                             {,12,4},
                             {,11,1}
                            }; 
    int NoOfElements=ArrayRange(SeondDataArray,0);            //GetTheNumberForLoop
    
    for(int i=0; i<NoOfElements; i++)
    {
       Print("i=",IntegerToString(i),
             " {",IntegerToString(SeondDataArray[i][0]),      //1stDimension
             ",",IntegerToString(SeondDataArray[i][1]),       //2ndDimension
             ",",IntegerToString(SeondDataArray[i][2]),"}"    //3rdDimension
            );
    }
    Print("====================");
    
    for(int i=0; i<NoOfElements; i++)
    {
       int NeededVal=SeondDataArray[i][2];               //GetValueOfLastDimension
       SeondDataArray[i][0]=NeededVal;                   //PutFoundValueIntoFirstDimension
    }
    
    ArraySort(SeondDataArray,WHOLE_ARRAY,0,MODE_ASCEND);  //SortArrayByFirstDimension

    for(int i=0; i<NoOfElements; i++)                     //Security:EmptyTheFirstDimensionForNextUse
    {
       SeondDataArray[i][0]=0;                            //PutEmptyIntoFirstDimension
       Print("i=",IntegerToString(i),
             " {",IntegerToString(SeondDataArray[i][0]),
             ",",IntegerToString(SeondDataArray[i][1]),
             ",",IntegerToString(SeondDataArray[i][2]),"}"
            );
    }
}
... funktioniert also.

Nun habe ich noch den Beschreibungsstring drin.
Den kann man ja als enum nehmen (damit hat man sowohl einen integer Wert als auch dessen string). Also hab ich erst mal versucht, eine enum nachher in die Tabelle zu schreiben - da gibt es schon wieder Gemecker (obwohl die Ausgabe korrekt ist):
Code:
enum PairNamesInt
{
   AUDCAD,  //0
   EURUSD,  //1
   TRYJPY,  //2
   USDJPY,  //3
   GBPAUD   //4
};
void OnStart()
{
   for(int i=0; i<4; i++)
   {
      PairNamesInt Number=i;  //=> i: implicit enum conversion
      Print(" Pair ",IntegerToString(i),"= ",EnumToString(Number) );
   }
}
Ich hasse dieses Meckern, vor allem wenn es komplett unverständlich ist.
Wenn ich z.B. als Benutzer bei einem Auswahlmenü in enum-Format den Text sehe und auwähle, dann nimmt MT doch intern dessen Nummernwert zur Erkennung (der wird ja wohl kaum mit Buchstaben rumhantieren).
In der Hilfe wird nur mit dem String gearbeitet, also probier ich es so und kriege eine andere Warnung:
Code:
      PairNamesInt Word;  //=> Word: possible use of uninitialized variable 'Word'
      Print(" Pair ",IntegerToString(i),"= ",(string)EnumToString(Word) );
Wo ist denn hier der Fehler? ( wahrscheinlich im Head bei #property strict - auskommentieren, dann ist Ruhe im Karton )
AVT