Comment sélectionner des modèles basés sur des segments de chaînesSalut,
Je suis un nouvel utilisateur de JSL. Afin de regrouper un grand nombre de broches et d'ajouter de nouvelles colonnes pour ces groupes, je pense utiliser JSL. J'ai appris à faire cela pour les premiers caractères consécutifs (par exemple pour DDR0CH0CKN... Je sais comment le filtrer en utilisant DDR0 ...) mais si je dois le faire en utilisant des segments comme 'DDR0' et 'CK', quel serait un moyen efficace de le faire?
FYI: Une façon, je le sais, consiste à utiliser un fichier créé manuellement, puis à utiliser la commande de mise à jour pour faire correspondre les broches aux groupes de broches (ce n'est pas un moyen efficace). J'ai essayé patMatch/regex etc. mais je n'ai pas pu obtenir le résultat souhaité.
Pour votre commodité, j'ai joint un fichier .jmp où je veux avoir une colonne appelée "Desired_Pin_Group" pour les broches.
J'apprécie votre coopération.
Salutations,
Hafiz.
Re : Comment sélectionner des modèles basés sur des segments de chaînesHafiz,
Je suis heureux d'avoir pu vous aider à résoudre votre problème.
Re : Comment sélectionner des modèles basés sur des segments de chaînesSalut txnelson,
J'ai utilisé le concept de l'instruction conditionnelle que vous avez fournie et j'ai pu résoudre mon problème. Plutôt que de convertir en minuscules, j'ai ajouté une nouvelle colonne dans le tableau et mis le nom de la broche directement à l'aide de parenthèses, comme suit :
dt < Formule(
Si(Contient(:Pin, "_CK")>0 & Contient(:Pin,"DDR0") & Contient(:Pin, "_CKE")==0,"ddr0_clk",
Contient(:Pin, "_CK")>0 & Contient(:Pin,"DDR1") & Contient(:Pin, "_CKE")==0,"ddr1_clk",
Cependant, je l'accepte comme une solution au problème.
Merci de votre aide.
Salutations,
Hafiz.
Re : Comment sélectionner des modèles basés sur des segments de chaînesJMP fournit un ensemble correspondance de modèle suite de fonctions et de constructions que vous pourriez trouver utiles ici. Voir Aider > Livres > Guide de script . Ensuite, recherchez cette section dans le livre.
Re : Comment sélectionner des modèles basés sur des segments de chaînesMerci pour votre réponse rapide. Le script est tout à fait correct pour le fichier .jmp que j'ai donné précédemment. Mais, malheureusement, ce n'est pas si simple. Le nombre de broches est compris entre 150 et 200 et celles-ci sont regroupées en 15 à 20 groupes. Veuillez jeter un coup d'œil au fichier .jmp nouvellement joint, il est plus proche du scénario réel. Jetez un coup d'œil du 22 au 27 et du 81 au 83. Ces 2 groupes ont DDR_Y en commun, mais ils sont filtrés en fonction d'autres phrases de la chaîne. La logique est quelque chose comme : if :Pin=='DDR_Y' && Pin != NC :Desired_Pin_Group=ddr_dq_ch0 else :Desired_Pin_Group=ddr_ctrl. Les critères de distinction entre les groupes (81-83) et (93-96) sont encore plus complexes. Il faut rechercher les dernières phrases.
Votre coopération est grandement appréciée.
Hafiz.
Re : Comment sélectionner des modèles basés sur des segments de chaînesVoici un script qui fera ce que vous voulez, compte tenu de l'exemple que vous avez donné.Si vous avez beaucoup plus de combinaisons de broches qui nécessitent un traitement des exceptions, ce n'est peut-être pas la meilleure façon de gérer cela.
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Generated Pin Group", character );
For Each Row(
// Get the first part of the group name
First = Lowercase( Substr( :Pin, 1, 4 ) );
// Handle exceptions like the below case
If( First == "ddrr",
First = "ddr0"
);
// Now attach the "_"
First = First || "_";
// Now add the second part based upon the given complexities
// Handle the clk
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0, First = First || "clk",
// Handle the vref
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
// Handle the cke
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
// Handle the reset
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
:Generated Pin Group = First;
);
Si vous voulez faire cela comme une formule pour une colonne, c'est juste un simple changement
First = Lowercase( Substr( :Pin, 1, 4 ) );
If( First == "ddrr",
First = "ddr0"
);
First = First || "_";
If(
Contains( :Pin, "_CK" ) > 0 & Contains( :Pin, "_CKE" ) == 0,
First = First || "clk",
Contains( :Pin, "_VREF" ) > 0, First = First || "vref",
Contains( :Pin, "_CKE" ) > 0, First = First || "cke",
Contains( :Pin, "RESET" ) > 0, First = First || "Reset"
);
First;