Verwendung von „für jede Zeile“ mit Spaltennamen aus einer Liste<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo zusammen
Ich arbeite an einer Möglichkeit, eine benutzergenerierte Tabelle zu bereinigen, und es tritt ein Problem auf: Der Code wird korrekt kompiliert, funktioniert aber nicht
Ich habe eine Tabelle mit unbekannten Spalten (gelesen: mehrfach, variabel, vom Benutzer handgeschrieben), sowohl in Zahlen als auch in Namen.
Ich möchte eine einfache Standardisierung durchführen, beispielsweise die Werte von unerwünschten Leerzeichen und Großbuchstaben befreien.
Also erstelle ich eine Liste mit Spaltennamen, erstelle einen Zyklus und füge ein für jede Zeile darin ein.
Es wird kompiliert, funktioniert aber nicht. irgendein Vorschlag? Der Code ist hier
user_page = open ("\user\page.csv", labels(1));
full_list = user_page <
für (i=1,i
sclmn = ":"||full_list ;
für jede Zeile (sclmn = trim (sclmn));
für jede Zeile (sclmn = Kleinbuchstabe (sclmn));
);
Ich habe mehrere Varianten ausprobiert, einen Spaltenverweis anstelle einer Zeichenfolge verwendet oder Eval() verwendet, aber alle konnten nicht kompiliert werden. Dieses Layout ist das einzige, das kompiliert wird, funktioniert aber immer noch nicht. Kann mir jemand helfen zu verstehen, warum?
Betreff: Verwendung von „für jede Zeile“ mit Spaltennamen aus einer ListeLaut JMP Scripting Guide: „Verwenden Sie immer einen Index für eine Spaltenreferenz, um auf die Werte in den Zellen von Spalten zuzugreifen.“ Dies scheint die beste Vorgehensweise zu sein, obwohl es Ausnahmen gibt, in denen es, wie Sie betonen, ohne die eckigen Klammern funktioniert.
Betreff: Verwendung von „für jede Zeile“ mit Spaltennamen aus einer ListeDanke, der zweite Ansatz hat funktioniert. (Ich bevorzuge das, weil ich dieselbe Liste für etwas anderes verwende)
Ich habe vor dem Posten die Funktion Column() ausprobiert, aber ohne [] hat es nicht funktioniert.
Ich habe auch den Debugger durchgesehen und er wurde korrekt als Spaltenverweis statt als Zeichenfolge verfolgt, und ich verstehe immer noch nicht, warum er das [] benötigt. Nehmen wir an, Sie verwenden eine festverdrahtete Version
für jede Zeile (:update_01 = trim (:update_01));
es funktioniert ohne [], und es scheint mir, dass es in der Hilfe oder in den Büchern keine Hinweise darauf gibt ...
Wie auch immer, jetzt funktioniert es. Danke!
Betreff: Verwendung von „für jede Zeile“ mit Spaltennamen aus einer ListeDer Trick besteht darin, JMP dazu zu bringen, sclmn als Spalte zu erkennen. Im aktuellen Skript ist sclmn nur eine Zeichenfolge. Außerdem erfordert ForEachRow() oft einen leeren Index [ ] nach Spaltenvariablen.
Hier sind zwei Möglichkeiten, dies zu tun:
Aus der Liste der Spaltennamen:
volle Liste = Benutzerseite << Spaltennamen abrufen () ;
Für ( ich = 1 , ich <= N Artikel ( volle Liste ) , ich ++,
sclmn = volle Liste [ ich ] ;
Für jede Reihe ( sclmn [] = Trimmen ( sclmn [] ) ) ;
Für jede Reihe ( sclmn [] = Kleinbuchstaben ( sclmn [] ) ) ;
) ;
Oder aus der Liste der Spaltennamen als Zeichenfolgen:
volle Liste = Benutzerseite << Spaltennamen abrufen ( Zeichenfolge ) ;
Für ( ich = 1 , ich <= N Artikel ( volle Liste ) , ich ++,
sclmn = Spalte ( volle Liste [ ich ] ) ;
Für jede Reihe ( sclmn [] = Trimmen ( sclmn [] ) ) ;
Für jede Reihe ( sclmn [] = Kleinbuchstaben ( sclmn [] ) ) ;
) ;