<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Nehmen wir an, ich habe eine Tabelle „dt“, in der Spaltennamen bedeutungslos sind.
Und ich habe eine Tabelle „dt_source“ mit zwei Spalten – eine Spalte hat einen bedeutungslosen Namen und die andere hat einen entsprechenden aussagekräftigen Namen.
Ich versuche, ein Skript zu schreiben, das Spalten von bedeutungslos in bedeutungsvoll umbenennt.
Die Spalten können unterschiedlich sein, daher erstelle ich eine Mastertabelle „dt_source“ mit entsprechenden Werten.
Jetzt habe ich ein Skript parat, das bedeutungslose und bedeutungslose Namen aus einer Liste im Skript übernimmt und die Spalten für jedes Paar umbenennt, wenn solche bedeutungslosen Namen vorhanden sind.
Ich möchte in der Lage sein, die entsprechenden Paare zu übernehmen, die nicht aus der eingegebenen Liste stammen:
name_in={"col1", "col2"};
name_out={"Alter", "Größe")
aber von einem Tisch.
Wie lese ich dt_name_source in zwei Listen ein: name_in und name_out?
Bisher habe ich Folgendes:
Namen standardmäßig hier ( 1 ) ;
Versuchen ( dt_source = Datentabelle ( „NameChanging.jmp“ ) , Werfen ( „Versuch, Datentabelle zu öffnen“ )) ;
Wenn ( Nicht ( Ist skriptfähig ( dt_source ) ) ,
dt_source = Offen ( „NameChanging.jmp“ ) , dt_source = Datentabelle ( „NameChanging.jmp“ ) ;
) ;
Aktuelle Datentabelle ( dt_source ) ;
name_in = Aufführen () ;
name_out = Aufführen () ;
col_name_in = Spalte ( „name_in“ ) ;
col_name_out = Spalte ( „name_out“ ) ;
ich = 0 ;
Für jede Reihe ( name_in [ ich ] = col_name_in [] ; name_out [ ich ] = col_name_out [] ; ich ++ ) ;
Aber dann gefällt es ihm nicht:
Indexproblem{1} beim Zugriff oder bei der Auswertung von „Assign“, name_in = /*###*/col_name_in[] /*###*/
Wenn ich es nur mit einer Variablen versuche
Für jede Reihe ( name_in = col_name_in [] ; name_out = col_name_out [] ) ;
Dann ist es in Ordnung, aber es ist nur eine Variable, die im Laufe des Zyklus unterschiedliche Werte annimmt.
Und ich brauche eine Liste.
Kann jemand eine Idee geben, wie man damit umgeht?
Danke!
Ich würde es wahrscheinlich etwas anders machen:
Namen sind standardmäßig hier (1);
// Zeiger auf die zu ändernde Datentabelle
dt = data table("Der Name der zu ändernden Tabelle");
for(i=1, i<=N Items(name_out), i++,
If(try(column(dt, name_in ) << get name, "") != "", Column( dt, name_in ) << Name festlegen(name_out ));
);
Jim,
Das scheint vorerst gut zu funktionieren. Lassen Sie mich wissen, ob dies die richtige Vorgehensweise ist:
for(i=1, i<=N Items(name_out), i++,
show(i); If( !Is Missing( Is Scriptable( Try( Column( name_in ) ) ) ), col=Spalte(name_in )< );
show(col); zeigen(i))
);
Jim,
Vielen Dank für die Antwort. Es funktioniert einfach gut.
Ich habe jedoch festgestellt, dass mein Umbenennungscode nicht funktioniert, wenn keine Spalten mit einem der Namen aus name_in vorhanden sind (und es gibt häufig Spalten in der Tabelle, die nicht ALLE Namen aus der Tabelle NameChanging.jmp enthalten).
Bisher habe ich Folgendes:
for(i=1, i<=N Items(name_out), i++,
show(i); Versuchen Sie(col=Spalte(name_in )< ), Throw("KEINE SPALTE GEFUNDEN");
show(col)); zeige(i)
)
Der Zyklus bricht jedoch nach der ersten Iteration ab, wenn der Vorname aus name_in nicht in der Tabelle gefunden wird.
Ich glaube, dass das folgende Skript die Werte in die von Ihnen benötigten Listen bringt:
Namen standardmäßig hier ( 1 ) ;
Wenn ( Versuchen ( dt_source << Namen bekommen, „“ ) != „Namensänderung“ ,
dt_source = Offen ( „NameChanging.jmp“ )
) ;
name_in = dt_source : name_in << Werte abrufen;
name_out = dt_source : name_out << Werte abrufen;