So wählen Sie Muster basierend auf Segmenten von Zeichenfolgen ausHi,
Ich bin ein neuer Benutzer von JSL. Um eine große Anzahl von Pins zu gruppieren und neue Spalten für diese Gruppen hinzuzufügen, denke ich darüber nach, JSL zu verwenden. Ich habe gelernt, wie man das für die ersten aufeinanderfolgenden Zeichen macht (z. B. für DDR0CH0CKN ... Ich weiß, wie man es mit DDR0 filtert ...), aber wenn ich das mit Segmenten wie 'DDR0' und 'CK' machen soll, was wäre ein effizienter Weg, das zu tun?
FYI: Ich weiß, eine Möglichkeit besteht darin, eine manuell erstellte Datei zu verwenden und dann den Update-Befehl zu verwenden, um Pins mit Pin-Gruppen abzugleichen (kein effizienter Weg). Ich habe patMatch/regex usw. ausprobiert, konnte aber nicht das gewünschte Ergebnis erzielen.
Der Einfachheit halber habe ich eine .jmp-Datei angehängt, in der ich eine Spalte namens "Desired_Pin_Group" für die Pins haben möchte.
Ich schätze deine Zusammenarbeit.
Grüße,
Hafiz.
Betreff: Wie man Muster basierend auf Segmenten von Zeichenfolgen auswähltHafiz,
Ich freue mich, dass ich Ihnen bei der Lösung Ihres Problems helfen konnte.
Betreff: Wie man Muster basierend auf Segmenten von Zeichenfolgen auswähltHallo Txnelson,
Ich habe das Konzept der bedingten Anweisung verwendet, die Sie bereitgestellt haben, und konnte mein Problem lösen. Anstatt in Kleinbuchstaben umzuwandeln, habe ich eine neue Spalte in der Tabelle hinzugefügt und den Pin-Namen direkt in Klammern gesetzt, wie folgt:
dt < Formel(
If(Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR0") & Contains(:Pin, "_CKE")==0,"ddr0_clk",
Contains(:Pin, "_CK")>0 & Contains(:Pin,"DDR1") & Contains(:Pin, "_CKE")==0,"ddr1_clk",
Ich akzeptiere es jedoch als Lösung des Problems.
Danke für Ihre Hilfe.
Grüße,
Hafiz.
Betreff: Wie man Muster basierend auf Segmenten von Zeichenfolgen auswähltJMP bietet eine vollständige Musterabgleich Reihe von Funktionen und Konstrukten, die Sie hier nützlich finden könnten. Sehen Hilfe > Bücher > Skriptleitfaden . Suchen Sie dann im Buch nach diesem Abschnitt.
Betreff: Wie man Muster basierend auf Segmenten von Zeichenfolgen auswähltDanke für die schnelle Antwort. Das Skript ist für die .jmp-Datei, die ich zuvor gegeben habe, ganz in Ordnung. Aber leider ist es nicht so einfach. Die Anzahl der Stifte liegt im Bereich von 150–200 und diese sind in 15–20 Gruppen gruppiert. Bitte werfen Sie einen Blick auf die neu angehängte .jmp-Datei, sie kommt dem realen Szenario näher. Schauen Sie einfach mal von 22-27 und 81-83 nach. Diese 2 Gruppen haben DDR_Y gemeinsam, aber sie werden basierend auf anderen Phrasen innerhalb der Zeichenfolge gefiltert. Die Logik ist etwa so: if :Pin=='DDR_Y' && Pin != NC :Desired_Pin_Group=ddr_dq_ch0 else :Desired_Pin_Group=ddr_ctrl. Noch komplexer sind die Unterscheidungskriterien zwischen den Gruppen (81-83) und (93-96). Man muss die letzten Sätze suchen.
Deine Mithilfe ist hoechst willkommen.
Hafiz.
Betreff: Wie man Muster basierend auf Segmenten von Zeichenfolgen auswähltHier ist ein Skript, das in Anbetracht des von Ihnen gegebenen Beispiels das tut, was Sie wollen.Wenn Sie viel mehr Pin-Kombinationen haben, die eine Ausnahmeverarbeitung erfordern, ist dies möglicherweise nicht der beste Weg, dies zu handhaben.
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;
);
Wenn Sie dies als Formel für eine Spalte tun möchten, ist dies nur eine einfache Änderung
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;