Suchen Sie nach der Spaltennummer?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo zusammen,
Ich brauche die Spaltennummer.Ich habe den Namen der Spalte, aber er befindet sich möglicherweise nicht immer an derselben Stelle.
Ich habe mich zunächst für die Verwendung einer While-Schleife entschieden, die die Iteration stoppt, wenn die Spalte gefunden wird.„n“ wäre die Spaltennummer, aber es funktioniert nicht.
colGefunden = 0 ;
N = 0 ;
Während ( colGefunden == 0 ,
N ++;
colName = Spaltenname ( N ) ;
Wenn ( colName == Vd , colGefunden = 1 , ) ;
) ;
Ich erhalte diese Fehlermeldung: Ungültiges Argument beim Zugriff oder bei der Auswertung von „Spaltenname“, Spaltenname/*###*/(n)
Wenn ich jedoch dies verwende (dieses Mal kenne ich die tatsächliche Nummer), wird der gesuchte Spaltenname zurückgegeben:
col = Spaltenname(38);
show(col);
Aus einem Beitrag ( Spaltennummer ), ich habe den Vorschlag von msharp verwendet, aber immer noch kein Glück, die Spaltennummer zu erhalten, es wird nur der Spaltenname zurückgegeben?
Betreff: Suchen Sie nach der Spaltennummer?Vielen Dank msharp, ich werde das im Hinterkopf behalten.Es ist viel sauberer!
Betreff: Suchen Sie nach der Spaltennummer?Nur als Faustregel.Ich würde sagen, wenn Ihr Code oder Ihre Tabelle so eingerichtet ist, dass es auf die Spaltenreihenfolge ankommt, machen Sie wahrscheinlich etwas Hässliches.Es könnte funktionieren, aber es gibt wahrscheinlich eine elegantere und schnellere Möglichkeit, dies zu tun.
Die Reihenfolge der Daten sollte eigentlich nur am Ende eines Skripts berücksichtigt werden, wenn Sie sich für die Anzeige der Daten entscheiden (und in den meisten Fällen ist das nicht einmal notwendig, da es normalerweise besser ist, die Daten in einem Diagramm und nicht in einer Tabelle anzuzeigen).
Abgesehen davon ist hässlicher Code, der funktioniert, immer noch guter Code.In Ihrem Fall ist dies möglicherweise die einfachste Lösung, vorausgesetzt, Sie haben keine Kontrolle darüber, wie die Datentabellen in Ihr Skript eingespeist werden.Sie könnten den Code jedoch trotzdem wie folgt komprimieren: (Beachten Sie, dass ich nie die Spaltennummer kennen muss).
colGefunden = 0 ;
ncols = ncol ( dtZusammenfassung ) ;
für ( ich = 1 , ich <= ncols , ich ++,
Wenn ( colGefunden ,
Wenn ( devicePass ,
devicePass --;
Einfügen in ( y_cols , ich , ich ) ;
,
brechen ()
)
) ;
colName = ( Spaltenname ( ich ) << Namen bekommen ) ;
Wenn ( colName == „Vd“ , colGefunden = 1 ) ;
) ;
Betreff: Suchen Sie nach der Spaltennummer?Wenn ich weiß, dass es in meinen Daten immer eine Spalte mit dem Namen „Vd“ geben wird, diese sich jedoch jedes Mal an einer anderen Stelle befinden kann, warum sollte ich dann nicht die Spaltennummer verwenden wollen?Nach der Vd-Spalte gibt es „x“ Spalten, die ich in eine Liste einfügen muss.Da die Anzahl der Spalten erst nach der Ausführung des Skripts bekannt ist und die Namen dieser Spalten anhand des Ergebnisses meiner Daten ermittelt werden, verstehe ich nicht, warum die Verwendung der Spaltennummer schrecklich ist.Ich nehme an, während diese Spalten erstellt werden, könnte ich sie in eine Liste einfügen, aber erklären Sie bitte, warum es schrecklich ist, die Spaltennummer zu erhalten?
colGefunden = 0 ;
N = 0 ;
ncols = ncol ( dtZusammenfassung ) ;
für ( ich = 1 , ich <= ncols , ich ++,
colName = ( Spaltenname ( ich ) << Namen bekommen ) ;
Wenn ( colName == „Vd“ , colGefunden = 1 ; brechen () , ) ;
) ;
iCol = 1 ;
//iCol = Enthält(dtSummary << Spaltennamen abrufen, Column("Vd"));
Wenn ( colGefunden == 1 ,
y_cols = {} ;
für ( N = iCol + 1 , N <= ( iCol + devicePass ) , N ++,
y_cols = Einfügen ( y_cols , N , N ) ;
) ,);
Betreff: Suchen Sie nach der Spaltennummer?Ich glaube, Sie haben meinen Vorschlag nicht verstanden.Mein Vorschlag ist, dass Sie KEINE Spaltennummer finden sollten.Es ist eine schlechte Codierungspraxis, in der Tat ist es schrecklich.
Betreff: Suchen Sie nach der Spaltennummer?Danke, ich freue mich, dass du gepostet hast!Ich habe es zum Laufen gebracht.Jetzt verstehe ich etwas mehr aus Ihren beiden Beiträgen
Betreff: Suchen Sie nach der Spaltennummer?Es sieht so aus, als wäre Peter mir bei der Antwort zuvorgekommen, aber hier ist eine andere Methode ohne Schleifen, die bei einer großen Anzahl von Spalten also schneller sein sollte.
dt = Offen ( „$sample_data\Analgesics.jmp“ );
Spaltennummer = Enthält (dt << Spaltennamen abrufen , Spalte ( "Arzneimittel" ));
Ersetzen Sie einfach „drug“ durch den Spaltennamen, nach dem Sie suchen, um die zugehörige Spaltennummer zu erhalten.
julianisch
Betreff: Suchen Sie nach der Spaltennummer?Oh, danke, dass du das verstanden hast!
Mein Code funktioniert gut, nochmals vielen Dank.
Betreff: Suchen Sie nach der Spaltennummer?Aus irgendeinem Grund funktionierte die While-Schleife nicht ordnungsgemäß, wenn der Spaltenname nicht gefunden wurde.Das ist etwas sauberer:
dt = Offen ( „$sample_data\Big Class.jmp“ ) ;
Aktuelle Datentabelle ( dt ) ;
vd = "Höhe" ;
colGefunden = 0 ;
N = 0 ;
ncols = ncol ( dt ) ;
für ( ich = 1 , ich <= ncols , ich ++,
colName = ( Spaltenname ( ich ) << Namen bekommen ) ;
Wenn ( colName == Vd ,
colGefunden = 1 ;
brechen () ;
) ;
) ;
Betreff: Suchen Sie nach der Spaltennummer?Der Spaltenname ist irreführend – er gibt die Spalte zurück, z. B. :height, und nicht „height“.Außerdem prüfen Sie nie, ob n die Anzahl der Spalten in Ihrer Tabelle überschreitet.Dieser Code wird funktionieren:
dt = Offen ( „$sample_data\Big Class.jmp“ ) ;
Aktuelle Datentabelle ( dt ) ;
vd = "Höhe" ;
colGefunden = 0 ;
N = 0 ;
ncols = ncol ( dt ) ;
Während ( ! colGefunden & N <= ncols ,
N ++;
colName = ( Spaltenname ( N ) << Namen bekommen ) ;
Wenn ( colName == Vd ,
colGefunden = 1
) ;
) ;