Speichern einer Variablen aus einer Datei und Verwenden der Max-Funktion in JSL-SkriptenHallo Mitglieder,
Ich bin ein neuer Benutzer und beginne gerade mit dem JSL-Skripting. Könnten Sie einen Vorschlag machen, wie Sie die folgenden Schritte ausführen müssen?
Ich habe 2 Dateien,
Datei1: enthält Daten mit Tausenden von Spalten (String) und Zeilen (Zahlen)
Datei2: enthält einige Listen von Spalten, die ich manuell erstellt habe, um die interessierte Spalte aus Datei1 auszuwählen
Meine Notwendigkeit ist, die Max-Funktion basierend auf der Liste aus Datei 2 auszuführen und eine neue Spalte in Datei 1 zu erstellen
Unten ist Code, den ich ausprobiert habe und der nicht wie erwartet funktioniert hat.
dt = Öffnen ("C:/Datei2.csv")
list = dt << Namen abrufen; // list = sind im Grunde ein paar zufällige Spaltennamen aus file1 = row 1 , row2, row10, etc
dt1 = Öffnen ("C:/Datei1.jmp")
Neue Spalte ( "Max-Liste", Numerisch, Formel (Max (Liste)));
DatentabelleSkripterstellungBetreff: Speichern einer Variablen aus einer Datei und Verwenden der Max-Funktion in JSL-SkriptenIch bin mir nicht sicher, wie Ihre Daten aussehen, aber hier ist ein Vorschlag. Nicht die einfachste Lösung und erfordert JMP16+
Names Default To Here(1);
dt = New Table("File2",
Add Rows(0),
Compress File When Saved(1),
New Column("Column 1", Character, "Nominal", Format("Best", 12), Set Values({"Column 1", "Column 2"}))
);
dt1 = New Table("File1",
Add Rows(3),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1])),
New Column("Column 2", Numeric, "Continuous", Format("Best", 12), Set Values([2, 2, 2])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Set Values([3, 3, 3]))
);
Show(dt << Get Name); // this will get name of the datatable not columns
max_list = Column(dt, "Column 1") << get values;
expr_max = Expr(Max());
For Each({col}, max_list,
Insert Into(expr_max, NameExpr(AsColumn(Column(dt1, col))))
);
Show(NameExpr(expr_max));
Eval(EvalExpr(
dt1 << New Column("MaxList", Numeric, Continuous, Formula(
Expr(NameExpr(expr_max))
));
));
Fügen Sie mit Eval Insert, Eval Expr, Parse und Substitute einen Ausdruck in einen anderen ein für eine gute Lektüre
Betreff: Variablen aus einer Datei speichern und für die Max-Funktion in JSL-Skripten verwendenVielen Dank Txnelson,
es funktionierte . Ich habe den einfachen Fehler gemacht, den Spaltennamen Maxlist in Datei2 nicht zu verwenden
Aber ich habe einen weiteren Fehler erhalten: Der Namespace „office1.close:today“ ist nicht definiert. Gibt den Maximalwert unter dem Argument oder den Werten darin in der einzelnen Matrix des Listenarguments zurück
„office1.close:today“ ist eine der Dateien2
Wenn ich die Maxlist-Spalte von Datei 1 öffne und auf Formel bearbeiten klicke, wird der Fehler angezeigt.
Betreff: Variablen aus einer Datei speichern und für die Max-Funktion in JSL-Skripten verwendenIch habe einen zweiten Blick auf Ihren letzten Beitrag geworfen und glaube, dass ich über ein neues Skript verfüge, das das komplexe Namensproblem lösen wird, das Sie in diesem Beitrag aufgedeckt haben.
// The code below this line is the that does the calculations The code above this line would
// not normally be included
Names Default To Here( 1 );
// point to the large data table with lots of rows and columns
dt = Data Table( "Main" );
// If you are opening the table from a folder, this statement would be
// dt = open("the path to the table");
// point to the second data table that contains a list of columns to be summed
dtMax = Data Table( "config" );
// If you are opening the table from a folder, this statement would be
// dtMax = open("the path to the table");
// Just added a short pause so one can see the original tables before changing
// Create the new columns
For( i = 1, i <= N Cols( dtMax ), i++,
sumList = Column( dtMax, i ) << get values;
dt << New Column( Column( dtMax, i ) << get name );
nameList = ":\!"" || sumList[1] || "\!"n";
For( k = 2, k <= N Rows( dtMax ), k++,
Insert Into( nameList, ", :\!"" || sumList[k] || "\!"n" )
);
Column( dt, N Cols( dt ) ) << set formula( Eval( Parse( "max(" || nameList || ")" ) ) );
);Betreff: Variablen aus einer Datei speichern und für die Max-Funktion in JSL-Skripten verwenden
danke für den Vorschlag, es hat nicht wie erwartet funktioniert, vielleicht mache ich etwas falsch. Um es klarer zu machen, habe ich angegeben, wie die Datei aussieht und welche Anforderungen sie erfüllt.
Datei1 sieht so aus (das ist meine Haupttabelle, in der ich die Maximalwerte von Büro1,2,4 finden möchte)
| Büro1 | Büro2 | Büro3 | Büro4 | Büro 5 |
| 2 | 3 | 0 | 6 | 1 |
| 3 | 2 | 6 | 4 | 4 |
| 2 | 5 | 3 | 2 | 3 |
| 1 | 0 | 2 | 3 | 2 |
| 4 | 1 | 2 | 7 | 1 |
| | | | | |
Erwartete Ausgabe mit neuer Spalte Maxlist (Werte aus Büro1,2,4)
einfache Lösung: Neue Spalte("MaxList", Numerisch, Kontinuierlich, Formel(Max(:"Büro1",:"Büro2,:"Büro4")));
| Büro1 | Büro2 | Büro3 | Büro4 | Büro 5 | .. | Maxliste | | |
| 2 | 3 | 0 | 6 | 1 | | 6 | | |
| 3 | 2 | 6 | 4 | 4 | | 4 | | |
| 2 | 5 | 3 | 2 | 3 | | 5 | | |
| 1 | 0 | 2 | 3 | 2 | | 3 | | |
| 4 | 1 | 2 | 7 | 1 | | 7 | | |
| | | | | | | | | |
da sich meine Maxliste täglich ändert, würde ich gerne eine weitere Datei2 als Eingabeparameter für die Maxliste verwenden
Datei2: Liste der als Eingabeparameter angegebenen Spaltennamen und Ausführung des Skripts
Suche nach einer Lösung, bei der ich die maximale Liste in Datei2 angeben und in Datei1 ausführen kann
Neue Spalte("MaxList", Numerisch, Kontinuierlich, Formel(Max( Basierend auf Datei2-Liste ")));