Come selezionare modelli basati su segmenti di stringheCiao,
Sono un nuovo utente di JSL. Per raggruppare un gran numero di pin e aggiungere nuove colonne per quei gruppi, sto pensando di usare JSL. Ho avuto modo di sapere come farlo per i primi caratteri consecutivi (ad esempio per DDR0CH0CKN... So come filtrarlo usando DDR0...) ma se devo farlo usando segmenti come "DDR0" e "CK", quale sarebbe un modo efficiente per farlo?
Cordiali saluti: un modo, lo so, è utilizzare un file creato manualmente e quindi utilizzare il comando di aggiornamento per abbinare i pin ai gruppi di pin (non è un modo efficiente). Ho provato patMatch/regex ecc. ma non sono riuscito a ottenere il risultato desiderato.
Per tua comodità, ho allegato il file .jmp in cui voglio avere una colonna chiamata "Desired_Pin_Group" per i pin.
Apprezzo la tua cooperazione.
Saluti,
Hafiz.
Re: Come selezionare pattern in base a segmenti di stringheHafiz,
Sono felice di essere stato in grado di aiutarti a risolvere il tuo problema.
Re: Come selezionare pattern in base a segmenti di stringheCiao txnelson,
Ho usato il concetto della dichiarazione condizionale che hai fornito e ho potuto risolvere il mio problema. Invece di convertire in minuscolo, ho aggiunto una nuova colonna nella tabella e ho inserito il nome del pin direttamente usando le parentesi, come:
dt < Formula(
If(Contiene(:Pin, "_CK")>0 & Contiene(:Pin,"DDR0") & Contiene(:Pin, "_CKE")==0,"ddr0_clk",
Contiene(:Pin, "_CK")>0 & Contiene(:Pin,"DDR1") & Contiene(:Pin, "_CKE")==0,"ddr1_clk",
Comunque lo accetto come soluzione al problema.
Grazie per l'aiuto.
Saluti,
Hafiz.
Re: Come selezionare pattern in base a segmenti di stringheJMP fornisce un intero corrispondenza del modello suite di funzioni e costrutti che potresti trovare utili qui. Vedere Aiuto > Libri > Guida agli script . Quindi cerca questa sezione nel libro.
Re: Come selezionare pattern in base a segmenti di stringheGrazie per la sua pronta risposta. Lo script è abbastanza ok per il file .jmp che ho fornito in precedenza. Ma, sfortunatamente, non è così semplice. Il numero di pin è compreso tra 150 e 200 e sono raggruppati in 15-20 gruppi. Dai un'occhiata al file .jmp appena allegato, è più vicino allo scenario reale. Basta dare un'occhiata da 22-27 e 81-83. Questi 2 gruppi hanno DDR_Y in comune, ma vengono filtrati in base ad altre frasi all'interno della stringa. La logica è qualcosa del tipo: if :Pin=='DDR_Y' && Pin != NC :Desired_Pin_Group=ddr_dq_ch0 else :Desired_Pin_Group=ddr_ctrl. I criteri di distinzione tra i gruppi (81-83) e (93-96) sono ancora più complessi. Bisogna cercare le ultime frasi.
La tua cooperazione è molto apprezzata.
Hafiz.
Re: Come selezionare pattern in base a segmenti di stringheEcco uno script che farà quello che vuoi, dato l'esempio che hai dato.Se hai molte più combinazioni di pin che richiedono l'elaborazione delle eccezioni, questo potrebbe non essere il modo migliore per gestirlo.
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;
);
Se vuoi farlo come formula per una colonna, è solo una semplice modifica
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;