Hallo zusammen!
Ich muss eine kleine Tabelle in eine Liste von assoziativen Arrays umwandeln. Jede Zeile soll ein Element dieser Liste und ein assoziatives Array sein, dessen Spaltennamen die Schlüssel und dessen Werte die Zeilenwerte sind.
Aktuell habe ich Folgendes:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
listAA = {};
columnList = dt << Get Column Names( string );
For Each Row(
currentAA = Associative Array();
For Each( {columnName, index}, columnList, currentAA[columnName] = Column( dt, columnName ) );
Insert Into( listAA, currentAA );
);
//Check
listAA[1]["age"]
//:*/
listAA[1]["age"]
/*:
Column( "age" )
Die Ausgabe ist kein Wert, sondern ein Verweis auf eine Spalte. Es scheint also nicht zu funktionieren, wenn man innerhalb von For Each Row mit Column(name) auf eine Spalte zugreift; nur fest codierte Namen wie im Scripting Index sind zulässig.
For Each Row( :height = -:height );
Fragen:
1. Gibt es eine einfache und elegante Möglichkeit, eine Liste von AAs aus einer Tabelle zu erhalten? Falls nicht – wie müsste ich meine aktuelle Version ändern?
2. Wie kann man bei der Verwendung von „Für jede Zeile“ auf eine Spalte verweisen, ohne dass diese fest codiert ist?
Danke,
M.
Vielleicht so etwas in der Art
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
collist = dt << Get Column Names(string);<BR />
l = {};
For Each Row(
aa = Associative Array(collist, dt[Row(), 0]);
Insert Into(l, aa);
);
Show(l);
Sie können es auch als .json speichern und anschließend in AA parsen.
Names Default To Here(1);
path = "$TEMP/test.json";
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Save(path);
json_str = Load Text File(path);
Delete File(path);
l = Parse JSON(json_str);