Ho un file che ho bisogno di modificare. La parte che devo modificare (non l'intero file), è simile alle proprietà mostrate sotto. Il problema è che ho solo bisogno di sostituire parte del "valore", "ConfigurablePart", se lo desideri. Ricevo questo file quindi non posso controllare il suo formato.Ho bisogno del metodo Groovy per eseguire sostituzioni di file parziali
alpha.beta.gamma.1 = constantPart1ConfigurablePart1
alpha.beta.gamma.2 = constantPart2ConfigurablePart2
alpha.beta.gamma.3 = constantPart3ConfigurablePart3
Ho fatto questo lavoro in questo modo, anche se so che è molto brutto!
def updateFile(String pattern, String updatedValue) {
def myFile = new File(".", "inputs/fileInherited.txt")
StringBuffer updatedFileText = new StringBuffer()
def ls = System.getProperty('line.separator')
myFile.eachLine{ line ->
def regex = Pattern.compile(/$pattern/)
def m = (line =~ regex)
if (m.matches()) {
def buf = new StringBuffer(line)
buf.replace(m.start(1), m.end(1), updatedValue)
line = buf.toString()
}
println line
updatedFileText.append(line).append(ls)
}
myFile.write(updatedFileText.toString())
}
Il modello passato è necessario per contenere un gruppo sostituito in StringBuffer. Qualcuno sa come dovrebbe essere fatto veramente in Groovy?
EDIT - per definire i risultati attesi
Il file che contiene le righe di esempio deve essere aggiornato in modo che il "ConfigurablePart" di ciascuna riga è sostituita con il testo aggiornato fornito. Per la mia brutta soluzione, dovrei chiamare il metodo 3 volte, una volta per sostituire ConfigurablePart1, una volta per ConfigurablePart2 e infine per ConfigurablePart3. Probabilmente c'è un approccio migliore anche a questo !!!
* AGGIORNAMENTO - risposta che ha fatto quello che ho davvero bisogno *
Nel caso in cui gli altri mai colpito un problema simile, i miglioramenti codice Groovy ho chiesto sono meglio riflette nella risposta accettata. Tuttavia, per il mio problema, questo non ha risolto completamente i miei problemi. Poiché dovevo sostituire solo una parte delle linee abbinate, avevo bisogno di usare riferimenti e gruppi. L'unico modo ho potuto fare questo lavoro è stato quello di definire un RegEx in tre parti come:
(.*)(matchThisPart)(.*)
Una volta che è stato fatto, sono stato in grado di utilizzare:
it.replaceAdd(~/$pattern/, "\$1$replacement\$3")
Grazie ad entrambe le risposte - ogni aiutato io fuori molto!
uscita prevista per Favore ... – HamZa