Problem : Ich führe ein Skript aus, um Daten aus einer Datenbank zu laden. Ich lösche alle Formeln aus der Datentabelle. Ich kopiere das Tabellenskript über das rote Dreiecksmenü. Ich füge das Tabellenskript in ein Skriptfenster ein. Ich führe das Skript aus. Die aus dem Tabellenskript resultierende Tabelle weist eine andere Spaltengruppierung auf und wirft die Spalten umher (siehe Screenshot, der den Bereich „Spalten“ aus der Originaltabelle und die Tabelle, wie sie durch das Tabellenskript erstellt wurde, nebeneinander zeigt). Siehe auch die beigefügten Dateien als Referenz.

Ich vermutete zunächst, dass dies daran lag, dass das Tabellenskript führende Leerzeichen in Spaltennamen nicht beibehielt, aber wie der Screenshot unten zeigt, sind die führenden Leerzeichen tatsächlich Teil des Tabellenskripts, sie werden in der daraus neu erstellten Tabelle nur nicht berücksichtigt Tabellenskript.

Gibt es eine Möglichkeit, die ursprüngliche Datentabelle wirklich wiederherzustellen, einschließlich Leerzeichen in Spaltennamen? Oder ist das im Allgemeinen eine schlechte Skriptstrategie?
Normalerweise habe ich mich bei Fehlern an den JMP-Support gewandt. Dieser Beitrag sollte ein recht gutes Beispiel für die Situation sein. Denken Sie also daran, einen Link dazu hinzuzufügen.
Es ist (meiner Meinung nach) auf jeden Fall eine gute Idee, die Spalten umzubenennen, anstatt zu versuchen, seltsame Problemumgehungen durchzuführen. Diese Leerzeichen könnten später sowieso Probleme verursachen.
@jthi Danke. Ich hatte Angst, dass das Führen von Leerzeichen eine schlechte Praxis sei. Gibt es eine Liste, zu der dieser Fehler hinzugefügt oder gemeldet werden kann oder darf?
Außerdem denke ich, dass es einfacher ist, mein Skript umzuschreiben, um andere Spaltennamen zu vergeben, als die von Ihnen vorgeschlagenen Problemumgehungen zu implementieren. (Ich habe Ihre Antwort versehentlich als Lösung bezeichnet, obwohl ich eigentlich nur versucht habe zu antworten.) Wie immer vielen Dank für Ihren unschätzbaren Beitrag und Ihren unermüdlichen Einsatz, andere JMP-Benutzer weiterzubilden. Das ist äußerst hilfreich.
Auch wenn ich niemals führende Leerzeichen im Spaltennamen verwenden würde (ich würde auch die meisten Sonderzeichen vermeiden), würde ich in diesem Fall sagen, dass es funktionieren sollte, da es in JMP ein gültiger Spaltenname zu sein scheint.Ich würde sagen, dass dies ein Fehler bei New Column ist.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]))
);
wait(1);
Column(dt, 2) << Set Name(" A");
wait(1);
dt << New Column(" A");
Die einzige „schnelle“ Problemumgehung, die mir in den Sinn kommt, besteht darin, das Skript „<< Name auf neue Tabelle festlegen“ hinzuzufügen. Ich bin mir jedoch nicht sicher, ob dies ausgelöst wird, bevor die Gruppierungen abgeschlossen sind
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]), << Set Name(" A"))
);
Sie müssten also zuerst das Skript in die Zwischenablage kopieren und es dann als Text abrufen und diesen ändern, bevor Sie es ausführen.
Dies ist ein sehr schnelles Beispiel, das mit diesem Beispiel funktioniert:
Names Default To Here(1);
str = JSL Quote(dt = New Table("Untitled",
Add Rows(1),
New Column("A", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column(" A", Numeric, "Continuous", Format("Best", 12), Set Values([2]))
));
new_lines = {};
For Each({line}, Words(str, "\!N"),
If(Starts With(Trim Whitespace(line), "New Column("),
// get column name
col_name = Regex(Trim Whitespace(line), "^New Column\(\!"(.+?)\!",\s", "\1");
// add set name
last_idx = Contains(line, ")", -1);
new_line = Left(line, last_idx - 1) || ", << Set Name(\!"" || col_name ||"\!")),";
Insert Into(new_lines, new_line);
,
Insert Into(new_lines, line);
);
);
old_dt = Eval(Parse(str));
new_dt = Eval(Parse(Concat Items(new_lines, "\!N")));