2017-05-24 2 views
0

Ich bin ein STARKEN Skript für ein Jenkinsfile Schreiben folgenden zu tun: regex "Value Key": zum AusfilternGroovy: Paar und Speicher in einem Array

Schritt-1: Lesen Sie die Eingabedatei info_file.txt. Inhalt der Info-Datei ist unter:

sh> cat info_file.txt 
CHIP_DETAILS:1234-A0;1456-B1;2456-B0;3436-D0;4467-C0 

Schritt-2: die CHIP_DETAILS in einem Array speichern, nachdem das Suffix Entfernen -A0,-B1 etc ..

zum Beispiel:

Integer[] testArray = ["1234", "1456", "2456" , "3436" , "4467"] 

Step-3 : Drucken Sie die Elemente des Arrays nacheinander. Zum Beispiel:

testArray.each { 
println "chip num is ${it}" 
} 

Ich habe einen kleinen Code geschrieben zu testen, ob der CHIP_DETAILS ‚Schlüssel‘ in der Eingabedatei ist und es funktioniert. Allerdings finde ich es schwierig, die Regex zum Entfernen des Suffix (-A0,-B1 usw.) zu schreiben und den entsprechenden Wert in einem Array zu speichern. der Code wie unter:

stage('Read_Params') 
     { 
      steps 
      { 
       script 
       { 
        println ("Let's validate and see whether the "Key:Value" is present in the info_file.txt\n"); 
        if (new File("$JobPath/Inputparams.txt").text?.contains("CHIPS_DETAILS")) 
        { 
         println ("INFO: "Key:Value" is present in the info_file.txt \n"); 
         >>>>> proceed with Step-1, Step-2 and Step-3... <<<<< 
        } 
        else 
        { 
         println ("WARN: "Key:Value" is NOT present in the info_file.txt \n"); 
         exit 0; 
        } 
       } 
      } 
     } 

Vielen Dank im Voraus für die Hilfe!

Antwort

1

Sie etwas versuchen könnten wie folgt aus:

def chipDetails = 'CHIP_DETAILS:1234-A0;1456-B1;2456-B0;3436-D0;4467-C0' 

def testArray = (chipDetails =~ /(?<=^|[:;])\d*(?=[-])/)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 
assert​ '1234' == testArray[0] 
assert '1456' == testArray[1] 
assert '2456' == testArray[2] 
assert '3436' == testArray[3] 
assert '4467' == testArray[4]​ 

Der reguläre Ausdruck sorgt für die Nummer, die Sie erfassen möchten, ist entweder am Anfang einer Zeile oder mit dem Präfix: oder; und suffixed mit -

Zwischen den Begrenzern kann eine beliebige Anzahl von Ziffern stehen.

Iterate über die Ergebnisse wie:

testArray.each{ 
    println it 
}​ 
+0

Dank @ Mike, diese Regex klingt gut. Gibt es einen Weg, auf dem ich "Werte" direkt in ein Array schreiben kann, anstatt nacheinander 'Assert' zu schreiben. Der Grund ist, dass die Anzahl der Einträge in den "CHIP_DETAILS" in meinem Fall dynamisch ist, da es ein Eingabeparameter ist, der vom Benutzer zum Zeitpunkt des Auslösens der Pipeline bereitgestellt wird. Ich meine, manchmal haben wir vielleicht nur einen Eintrag, sagen wir 1234-A0, oder wir können mehr als 10 Einträge haben, abhängig von den Benutzereingaben. – Yash

+0

@Yash die Behauptungen sind nur da, um Ihnen zu zeigen, die Ergebnisse sind wie erwartet, sie sind nicht für die Lösung erforderlich, alles wird benötigt, ist die Regex und Zuordnung zu testArray, ich habe die Frage aktualisiert, um zu zeigen, wie über das Array zu iterieren –

+0

Danke @Mike !! – Yash

Verwandte Themen