Vous cherchez le numéro de colonne ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut tout le monde,
J'ai besoin du numéro de colonne.J'ai le nom de la colonne, mais il se peut qu'elle ne soit pas toujours dans le même espace.
J'ai d'abord décidé d'utiliser une boucle While qui arrête l'itération lorsque la colonne est trouvée."n" serait le numéro de colonne, mais cela ne fonctionne pas.
colTrouvé = 0 ;
n = 0 ;
Alors que ( colTrouvé == 0 ,
n ++ ;
nomCol = Nom de colonne ( n ) ;
si ( nomCol == Vd , colTrouvé = 1 , ) ;
) ;
J'obtiens cette erreur : argument invalide lors de l'accès ou de l'évaluation de 'Column Name' , Column Name/*###*/(n)
Cependant, si j'utilise ceci (cette fois, je connais le nombre réel), il renvoie le nom de colonne que je recherche :
col = Nom de la colonne (38);
show(col);
À partir d'un message ( numéro de colonne ), j'ai utilisé la suggestion de msharp, mais toujours pas de chance pour obtenir le numéro de colonne, cela renvoie simplement le nom de la colonne ?
Re : Vous cherchez le numéro de colonne ?Merci msharp, je garderai cela à l'esprit.C'est bien plus propre !
Re : Vous cherchez le numéro de colonne ?Juste en règle générale.Je dirais que si votre code ou votre table est configuré de telle manière qu'il dépend de l'ordre des colonnes, vous faites probablement quelque chose de moche.Cela pourrait fonctionner, mais il existe probablement un moyen plus élégant et plus rapide de le faire.
L'ordre des données ne doit être pris en compte qu'à la fin d'un script lorsque vous choisissez d'afficher les données (et pour la plupart, ce n'est même pas nécessaire puisqu'il est généralement préférable d'afficher les données dans un graphique et non dans un tableau).
Cela étant dit, un code laid qui fonctionne reste du bon code.Dans votre cas, en supposant que vous n'avez aucun contrôle sur la manière dont les tables de données sont introduites dans votre script, cela peut être la solution la plus simple.Cependant, vous pouvez toujours condenser le code comme ceci : (Remarquez que je n'ai jamais besoin de connaître le numéro de colonne).
colTrouvé = 0 ;
ncols = ncol ( dtRésumé ) ;
pour ( je = 1 , je <= ncols , je ++,
si ( colTrouvé ,
si ( appareilPass ,
appareilPass --;
Insérer dans ( y_cols , je , je ) ;
,
casser ()
)
) ;
nomCol = ( Nom de colonne ( je ) << obtenir un nom ) ;
si ( nomCol == "Vd" , colTrouvé = 1 ) ;
) ;
Re : Vous cherchez le numéro de colonne ?Si je sais qu'il y aura toujours une colonne nommée « Vd » dans mes données mais qu'elle pourrait se trouver à un emplacement différent à chaque fois, pourquoi ne voudrais-je pas utiliser le numéro de colonne ?Après la colonne Vd, il y aura un nombre "x" de colonnes que je devrai insérer dans une liste.Étant donné que le nombre de colonnes est inconnu jusqu'à ce que j'exécute le script et que les noms de ces colonnes seront déterminés en fonction du résultat de mes données, je ne vois pas pourquoi l'utilisation du numéro de colonne est horrible.Je suppose qu'au fur et à mesure que ces colonnes sont créées, je pourrais les insérer dans une liste, mais veuillez expliquer pourquoi obtenir le numéro de colonne est horrible ?
colTrouvé = 0 ;
n = 0 ;
ncols = ncol ( dtRésumé ) ;
pour ( je = 1 , je <= ncols , je ++,
nomCol = ( Nom de colonne ( je ) << obtenir un nom ) ;
si ( nomCol == "Vd" , colTrouvé = 1 ; casser () , ) ;
) ;
iCol = 1 ;
//iCol = Contains(dtSummary << obtenir les noms de colonnes, Column("Vd"));
si ( colTrouvé == 1 ,
y_cols = {} ;
pour ( n = iCol + 1 , n <= ( iCol + appareilPass ) , n ++,
y_cols = Insérer ( y_cols , n , n ) ;
) ,) ;
Re : Vous cherchez le numéro de colonne ?Je pense que vous n'avez pas compris ma suggestion.Ma suggestion est que vous ne devriez PAS trouver de numéro de colonne.C’est une mauvaise pratique de codage, en fait c’est horrible.
Re : Vous cherchez le numéro de colonne ?Merci, content d'avoir posté !Je l'ai fait fonctionner.Maintenant, je comprends un peu plus vos deux messages
Re : Vous cherchez le numéro de colonne ?Il semble que Peter m'ait devancé pour répondre, mais voici une autre méthode sans aucune boucle, elle devrait donc être plus rapide pour un grand nombre de colonnes.
dt = Ouvrir ( "$sample_data\Analgesics.jmp" );
numéro_colonne = Contient (dt << obtenir les noms de colonnes , Colonne ( "médicament" ));
Remplacez simplement « drogue » par le nom de colonne que vous recherchez pour obtenir le numéro de colonne associé.
julien
Re : Vous cherchez le numéro de colonne ?Oh merci d'avoir attrapé ça !
Mon code fonctionne bien, merci encore.
Re : Vous cherchez le numéro de colonne ?Pour une raison quelconque, la boucle while ne fonctionnait pas correctement si le nom de la colonne n'était pas trouvé.C'est un peu plus propre :
dt = Ouvrir ( "$sample_data\Big Class.jmp" ) ;
Tableau de données actuel ( dt ) ;
vd = "hauteur" ;
colTrouvé = 0 ;
n = 0 ;
ncols = ncol ( dt ) ;
pour ( je = 1 , je <= ncols , je ++,
nomCol = ( Nom de colonne ( je ) << obtenir un nom ) ;
Si ( nomCol == Vd ,
colTrouvé = 1 ;
casser () ;
) ;
) ;
Re : Vous cherchez le numéro de colonne ?le nom de la colonne est trompeur - il renvoie la colonne, par exemple : hauteur, et non "hauteur".De plus, vous ne vérifiez jamais si n dépasse le nombre de colonnes de votre table.Ce code fonctionnera :
dt = Ouvrir ( "$sample_data\Big Class.jmp" ) ;
Tableau de données actuel ( dt ) ;
vd = "hauteur" ;
colTrouvé = 0 ;
n = 0 ;
ncols = ncol ( dt ) ;
Alors que ( ! colTrouvé & n <= ncols ,
n ++ ;
nomCol = ( Nom de colonne ( n ) << obtenir un nom ) ;
Si ( nomCol == Vd ,
colTrouvé = 1
) ;
) ;