Mam plik, który muszę zmodyfikować. Część, którą muszę zmodyfikować (nie cały plik), jest podobna do właściwości pokazanych poniżej. Problem polega na tym, że muszę tylko zastąpić część "wartości", "Konfigurowalna część", jeśli zechcesz. Otrzymuję ten plik, więc nie mogę kontrolować jego formatu.Potrzebujesz sposobu Groovy na częściowe zastępowanie plików
alpha.beta.gamma.1 = constantPart1ConfigurablePart1
alpha.beta.gamma.2 = constantPart2ConfigurablePart2
alpha.beta.gamma.3 = constantPart3ConfigurablePart3
Wykonałem tę pracę w ten sposób, choć wiem, że jest naprawdę źle!
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())
}
Przekazany wzór jest wymagany, aby zawierać grupę podstawioną w StringBuffer. Czy ktoś wie, jak to naprawdę powinno się robić w Groovy?
EDIT - aby określić oczekiwany wynik
plik zawierający przykładowe linie musi być aktualizowany tak, że „ConfigurablePart” z każdej linii jest zastąpiona zaktualizowanym tekstowym. Dla mojego brzydkiego rozwiązania, musiałbym wywołać metodę 3 razy, raz, aby zastąpić ConfigurablePart1, raz dla ConfigurablePart2, a na końcu dla ConfigurablePart3. Prawdopodobnie istnieje lepsze podejście do tego!
* AKTUALIZACJA - Odpowiedź, że zrobił to, co naprawdę potrzebne *
w przypadku innych kiedykolwiek uderzył podobny problem, Groovy ulepszeń kodu Pytałem o najlepiej odzwierciedlone w przyjętym odpowiedź. Jednak z mojego problemu, który nie całkiem rozwiązał moje problemy. Ponieważ musiałem zastąpić tylko część dopasowanych linii, musiałem użyć referencji zwrotnych i grup. Jedynym sposobem mogę dokonać tej pracy było określenie trzyczęściowej regex takich jak:
(.*)(matchThisPart)(.*)
Gdy to się stało, byłem w stanie używać:
it.replaceAdd(~/$pattern/, "\$1$replacement\$3")
Dzięki obu odpowiedziach - każdy pomógł mnie bardzo dużo!
Oczekiwany wyjście proszę ... – HamZa