Fügen Sie die Spaltenvariable in die Formel einHallo,
Ich versuche, einer Datentabelle ein Skript hinzuzufügen, mit dem der Benutzer eine bestimmte Spalte (: Dateiname) nach Trennzeichen parsen kann, die der Benutzer in einem Anzeigefeld (Delim) auswählt. Idealerweise analysiert die Formel die Spalte: Dateiname so lange, bis nichts mehr zu analysieren ist. Ein Block meines Skripts ist unten. Darin erstelle ich eine neue Spalte (Spalte) für jedes analysierte Segment von: Dateiname. Ich prüfe col auf fehlende Werte und stoppe dann, wenn die gesamte Spalte leer ist.
Mein Problem ist, dass ich Col nicht in der Formel bewerten kann. Ich habe es sogar probiert FRAU 's Eval (Parse (Eval Insert ())) Trick, aber ich kann es nicht zum Laufen bringen. Gibt es irgendwelche Vorschläge? Ich verwende JMP11.
Vielen Dank!
// Example script.
// Note: col = Column( "Column 442" );
delim = "-";
i = 1;
j = 1;
While( j > 0,
j = 0;
col = dt << New Column();
col << Data Type( Character, Nominal );
col << Set Formula( Word( i, :File Name, delim ) );
For Each Row( If( Is Missing( :Column 442 ) == 0, j = j + 1 ) ); // This works.
Eval( Parse( Eval Insert( "For Each Row( If( Is Missing(:Column 442) == 0, j = j + 1 ) )" ) ) ); // This works.
Eval( Parse( Eval Insert( "For Each Row( If( Is Missing(^col^) == 0, j = j + 1 ) )" ) ) ); // This does not work.
Eval( Parse( Eval Insert( "For Each Row( If( Length(^col^) != 0, j = j + 1 ) )" ) ) ); // This does not work.
i = i + 1;
);
Re: Fügen Sie die Spaltenvariable in die Formel ein<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Danke, MS!
Re: Fügen Sie die Spaltenvariable in die Formel einDenken Sie auch daran: col bezieht sich auf eine Spalte als Ganzes. Innerhalb einer For Each Row-Schleife müssen Sie die [] -Notation verwenden, um auf die aktuelle Zelle zu verweisen (einer von vielen Gründen, For For Loops nicht zu verwenden!).
Re: Fügen Sie die Spaltenvariable in die Formel einDie Variable col ist ein Verweis auf eine Spalte. In einer ForEachRow () - Schleife müssen wir jedoch nicht auf die Spalte, sondern auf ihre Werte zugreifen. Die beiden folgenden Alternativen sollten in Ihrem Code funktionieren. Beachten Sie den leeren Index [] im zweiten Beispiel.
Eval ( Parse ( Eval Insert ( "Für jede Zeile (If (fehlt (als Spalte (^ col ^)) == 0, j = j + 1))" ))) ;
Eval ( Parse ( Eval Insert ( "Für jede Zeile (Wenn (fehlt (^ col ^ []) == 0, j = j + 1)) ))) ;
Re: Fügen Sie die Spaltenvariable in die Formel einok Ich werde nicht versuchen, Ihren Code zu verstehen, aber in Bezug auf die Syntax sagen Sie, dass die folgenden Funktionen funktionieren:
Eval ( Parse ( Eval Insert ( "
Für jede Zeile (If (fehlt (: Spalte 442) == 0, j = j + 1));
" ))) ;
Der Inhalt des Eval-Musters ist eine Zeichenfolge. Die Variable, die Sie in die Zeichenfolge "^ ... ^" einfügen, wird als Zeichenfolge fungieren. Wenn Sie es also verallgemeinern möchten, können Sie die folgende Funktion verwenden
colName = col << Name abrufen ; // zB colName = "Spalte 442"
Eval ( Parse ( Eval Insert ( "
Für jede Zeile (If (fehlt (: ^ cName ^) == 0, j = j + 1));
" ))) ;