Instructions conditionnelles, action et suppression de colonnes<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour à tous,
J'ai un problème avec un script JSL et j'ai recherché une réponse dans la documentation, les livres et les forums d'utilisateurs.
J'ai écrit un script contenant une instruction conditionnelle en JSL, et l'un des "résultats" consiste à effectuer une action telle que supprimer une ligne.Cela peut-il être fait dans une instruction conditionnelle?
Utilisons cet exemple de code :
NE3=3 ;
NE4=5 ;
/* Ces variables peuvent prendre des valeurs différentes. */
Si (NE3==NE4,
NouveauNum = NE3,
NouveauNum = index (NE3, NE4)
);
Si (NouveauNum == 0,
Imprimer ("Pas de suppression"),
Tableau de données actuel () << supprimer la colonne (NouveauNum)
);
Comme vous pouvez le voir ou le deviner, je ne peux pas supprimer de colonnes.Plus important encore, j'ai utilisé la première instruction conditionnelle parce que je voulais qu'elle crée une plage ou une valeur unique.
Cependant, je ne sais pas quoi faire avec 0 comme valeur, car JMP ne peut pas supprimer quelque chose qui n'existe pas (c'est-à-dire la colonne 0).Toutes les suggestions seront grandement appréciées!
Merci beaucoup,
K
Re : Déclarations conditionnelles, action et suppression de colonnesIndex() donne un vecteur colonne, d'où les doubles parenthèses. Essayez de transposer la matrice.
DC_List1 = Comme liste ( transposer ( Indice ( DC1 , DC2 ))) ;
DC_List2 = Comme liste ( transposer ( Indice ( DC3 , DC4 ))) ;
Re : Déclarations conditionnelles, action et suppression de colonnesJ'ai travaillé davantage avec les instructions conditionnelles et les colonnes de suppression.J'ai joué un peu plus avec, et je vois ce que vous voulez dire par supprimer des colonnes en prenant soit un seul nom de colonne ou un index, soit une liste de noms de colonnes ou d'index.Cependant, après avoir parcouru le code donné et juste isolé pour l'action de suppression de colonne et créé une liste d'index, je ne suis toujours pas en mesure de supprimer une gamme complète d'index pour les colonnes.Par exemple:
Disons que le dt a 13 colonnes, et je veux supprimer les trois premiers (1-3) et les deux derniers (12-13).
DC1 = 1 ;
DC2 = 3 ;
DC3 = 12 ;
DC4 = 13 ;
DC_List1 = Comme liste ( Indice ( DC1 , DC2 )) ;
DC_List2 = Comme liste ( Indice ( DC3 , DC4 )) ;
DC_List3 = DC_List1 || DC_List2 ;
Tableau de données actuel () << supprimer des colonnes ( dc_list3 ) ; /* Supprime uniquement la première colonne b/c qui correspond à la valeur de la première variable. */
/* Pour supprimer ne serait-ce qu'une seule des listes créées, cela échoue toujours. */
tableau de données actuel () << supprimer des colonnes ( dc_list1 ) ; /* Supprime uniquement la première colonne b/c qui correspond à la valeur de la première variable. */
Spectacle ( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}} ; */
Spectacle ( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}} ; */
Je sais que la fonction "As List" convertit la matrice en liste, mais je ne comprends pas pourquoi elle lui donne des accolades doubles.Je pense que c'est ce qui perturbe mon code pour cela.J'ai essayé de nombreuses combinaisons en vain.Des idées/suggestions/aide?Merci d'avance pour votre aide!
Re : Déclarations conditionnelles, action et suppression de colonnesAucune critique du tout !Je l'ai demandé.Je vois cela comme une aide pour moi (et la communauté JMP) avec des pointeurs et pour travailler sur les détails les plus fins.J'ai beaucoup appris et je vous remercie d'avoir pris le temps de répondre à mes questions et de m'avoir enseigné ces points importants.
Re : Déclarations conditionnelles, action et suppression de colonnesVous pouvez exécuter une instruction ou 1000 dans une instruction conditionnelle.Vous pouvez effectuer des instructions exploitables dans une instruction conditionnelle, comme indiqué par mon code.
Votre syntaxe était incorrecte à plusieurs égards.
Si (NE3==NE4,
NouveauNum = NE3,
NouveauNum = index (NE3, NE4)
);
Le résultat de cette instruction IF est que newnum est soit un nombre, soit une matrice.C'est correct mais peut-être un peu déroutant, car newnum est utilisé pour deux types de valeurs différents (nombre et matrice).Mais cela causera des problèmes avec la prochaine instruction IF, comme indiqué ci-dessous.
Si (NouveauNum == 0,
Imprimer ("Pas de suppression"),
Tableau de données actuel () << supprimer la colonne (NouveauNum)
);
C'est vraiment là que réside le problème.Newnum ne sera 0 que si NE3 et NE4 sont 0. Si vous obtenez une matrice à partir de l'instruction IF précédente (lorsque NE3 n'est pas égal à NE4), la comparaison de NewNum à 0 n'a pas de sens.Enfin, votre instruction de suppression de colonne ne fonctionnera que si newnum est un entier ou une liste.L'instruction AS LIST est donc essentielle.
J'espère que cela aide - cela se veut une critique constructive.
J'ai eu beaucoup de difficultés lors de mon premier apprentissage de JSL, en particulier avec l'instruction IF !J'ai développé un style qui inclut des commentaires indiquant où se trouvent les parties THEN et ELSE de la déclaration.Par exemple:
si ( time_choice == 1 ,
// alors
date_clause = "Courant" ;
case_list = { 1 , 2 , 3 , 4 } ;
// autre
,
date_clause = "Cumulatif" ;
case_list = { 1 , 2 , 3 , 4 , 5 , 6 , sept , 8 , 9 } ;
) ;
Re : Déclarations conditionnelles, action et suppression de colonnesMerci pour ton aide!Je l'apprécie vraiment.Une question qui est au cœur de l'instruction conditionnelle : pouvez-vous effectuer une action (c'est-à-dire supprimer et/ou ajouter des colonnes, des lignes, des dt) dans une instruction conditionnelle ?Je ne comprends pas pourquoi le code n'a pas supprimé la ou les colonnes spécifiées.Était-ce simplement parce qu'il me manquait la fonction as list dans mon exemple d'instruction ? Ou ma syntaxe était-elle désactivée ?J'apprends encore tous les tenants et les aboutissants des conditionnels en JSL, et je vois que vous avez utilisé des points-virgules pour "coller" des expressions ensemble.Merci encore!
Re : Déclarations conditionnelles, action et suppression de colonnesC'est un peu délicat.Supprimer des colonnes prend soit un seul nom de colonne ou un index, soit un liste de noms de colonnes ou d'indices.Ce programme fera l'affaire.Noter la COMME LISTE fonction qui convertit une matrice en liste :
NE3 = 3 ;
NE4 = 5 ;
/* Ces variables peuvent prendre des valeurs différentes. */
dt = tableau de données actuel () ;
NC = ncols ( dt ) ;
si ( ne3 > 0 & ne3 <= NC & ne4 > 0 & ne4 <= NC ,
Si ( NE3 == NE4 ,
dt << supprimer la colonne ( ne3 ) ;
,
Nouvelle liste = sous forme de liste ( Indice ( NE3 , NE4 )) ;
dt << supprimer la colonne ( Nouvelle liste ) ;
) ;
) ;