Datentabelle: Nachrichtenspalte vorhanden (Spaltenname)?☐ coole neue Funktion
☑ könnte vielen Benutzern helfen!
☑ beseitigt einen „Bug“
☐ schön zu haben
☐ Niemand braucht es
Gibt es eine Spalte? Spaltenname in meiner Datentabelle?
Dies ist eine der Fragen, die in der Community am häufigsten gestellt werden:
https://community.jmp.com/t5/Discussions/Check-column-name-if-existing/mp/312011/highlight/true#M56...
https://community.jmp.com/t5/Discussions/How-to-check-if-list-of-columns-exist-and-report-those-that...
https://community.jmp.com/t5/Discussions/If-column-exists/td-p/348
https://community.jmp.com/t5/Discussions/how-to-creat-new-column-if-same-name-column-does-not-exist/...
https://community.jmp.com/t5/Discussions/Create-a-new-Row-column-only-if-it-does-not-exist/td-p/3091...
https://community.jmp.com/t5/Discussions/Determining-if-a-column-exists/mp/6268#M6267
https://community.jmp.com/t5/Discussions/Validate-column-name-exists-before-graphing/mp/5088#M5087
Es scheint also, dass die Art und Weise, wie es derzeit umgesetzt wird, nicht einfach genug ist.
Aber es ist noch interessanter – und birgt viele Gefahren.
Ein Benutzer, der nichts über die Stolpersteine im Zusammenhang mit JSL-Namenskonventionen weiß, schreibt höchstwahrscheinlich nur
Contains( dt << Get Column Names(String), "age" )
in seinen Code ein. Ziemlich leicht ...
aber äußerst gefährlich - siehe:
https://community.jmp.com/t5/Discussions/check-if-column-exists/mp/572468
Was nach seltsamen Diskussionen einiger JSL-Scripting-Nerds aussieht, zeigt, dass die obige Aussage sicherlich in vielen Fällen funktionieren wird, aber:
schlägt fehl, sobald Leerzeichen, Großbuchstaben und Sonderzeichen in den Spaltennamen enthalten sind.
Um zu verhindern, dass Benutzer solchen gefährlichen Code verwenden, ist es am besten, ihn zu „institutionalisieren“.
- dh den Benutzern eine einfache Lösung bieten, die alle Fallstricke automatisch berücksichtigt.
Mein Wunsch:
Es sollte möglich sein, eine Datentabelle abzufragen:
dt << contains column("colname")
Diese Funktion kann alle Fallstricke beseitigen:
- Mit exakter Übereinstimmung vergleichen - oder Übereinstimmung prüfen als name("colname")<FONT face="arial,helvetica,sans-serif"> , unter Berücksichtigung von Leerzeichen</FONT>
- Klein-/Großbuchstaben unterscheiden oder nicht unterscheiden
- Umgang mit Sonderzeichen
Der Vorteil:
- weniger Fragen in der Community
- automatisch besserer Code.
- weniger Frustration.
Automatisierung und SkripterstellungBetreff: Datentabelle: Nachrichtenspalte vorhanden (Spaltenname)? - Status geändert in: Ja, bleiben Sie dran!Die Entwicklung sucht nach einer Lösung: „ eine Nachricht auf dem Tisch haben, um sie direkt zu fragen, z dt << Hat Column("age") , möglicherweise mit der Option, unterschiedliche Antworten zu geben, wenn Sie genaue Übereinstimmungen oder Namensübereinstimmungen (ohne Berücksichtigung von Leerzeichen und Groß-/Kleinschreibung) wünschen.
Wechseln zu „Ja, bleiben Sie dran“.
Betreff: Datentabelle << Spalte existiert („Name“)? – Status geändert zu: Wird untersuchtBetreff: Datentabelle << Spalte existiert („Name“)?Danke @hogi , Und @jthi zum Kommentieren. Ändern Sie den Status in „Untersuchung“.
Betreff: Datentabelle << Spalte existiert („Name“)? - Status geändert in: BestätigtHallo @hogi , Danke für deinen Vorschlag! Wir haben Ihre Anfrage erfasst und werden sie prüfen.
Betreff: Datentabelle << Spalte existiert („Name“)?Könnte es besser sein, JMP klar zu machen, dass es sich entweder um dieselben oder um unterschiedliche Spaltennamen handelt? Dies kann natürlich zu Problemen führen und ist daher möglicherweise nicht so einfach umzusetzen.
Hier ist etwas etwas verwirrend:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt:age << set name("a g e");
dt:age[1] = 999;
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
dt << New Column("age", Numeric, Ordinal);
Show(Column Name(2) == Column Name(6)); // Column Name(2) == Column Name(6) = 1; // Columns don't need unique names?
Show(Column(dt, "age")); //Column(dt, "age") = Column("age");
dt:age[1] = 9999;
Show(dt:age[1]); //dt:age[1] = 9999;
wait(1);
dt << Delete Column("age");
Show(Column(dt, "age")); //Column(dt, "age") = Column("a g e");
Show(dt:age[1]); //dt:age[1] = 999;
Folgen Spalten einer bestimmten Benennung? Folgen Sie Namen müssen mit Buchstaben oder Unterstrichen beginnen , aber Leerzeichen sind (manchmal) für Spalten wichtig. Vielleicht liegt das Problem (falls es eines gibt) einfach darin, wie die Spaltenreferenzierung funktioniert?