2013-06-30 5 views
22
ersetzt

Hallo ich benutze groovy 2.1.5 und ich muss einen Code schreiben, der die Inhalte/Dateien eines Verzeichnisses mit einem bestimmten Pfad zeigt, dann macht es eine Sicherung von die Datei und ersetzen Sie ein Wort/eine Zeichenfolge aus der Datei. hier ist der Code habe ich verwendet, um zu versuchen, ein Wort in der Datei auch meine komplette Code hierWie man eine Zeichenfolge/ein Wort in einer Textdatei in groovy

String contents = new File('/geretd/resume.txt').getText('UTF-8') 
contents = contents.replaceAll('visa', 'viva') 

ausgewählt zu ersetzen, wenn jemand es in einer effizienteren Weise modifizieren möchte, werde ich es, da ich zu schätzen wissen ich lerne.

Antwort

8

Siehe this answer, wo Muster ersetzt werden. Das gleiche Prinzip kann zum Ersetzen von Zeichenfolgen verwendet werden.

Probe

def copyAndReplaceText(source, dest, Closure replaceText){ 
    dest.write(replaceText(source.text)) 
} 

def source = new File('source.txt') //Hello World 
def dest = new File('dest.txt') //blank 

copyAndReplaceText(source, dest) { 
    it.replaceAll('World', 'World!!!!!') 
} 

assert 'Hello World' == source.text 
assert 'Hello World!!!!!' == dest.text 
+0

Hallo. Ich bin irgendwie neu zu groovy, ich arbeite seit zwei Tagen damit. Wenn ich die eingegebene Antwort kopiere, funktioniert das an meinem Code? – geretd

+1

@geretd Ja es wird, aber ich würde Sie nicht ermutigen, nur die Antwort zu kopieren. Probieren Sie es in der Groovy Console aus und sehen Sie, wie es sich verhält. Versuche, jede Zeile zu verstehen. Ende des Tages würde es ein Teil in Ihrer Lernkurve werden, wenn Sie es verstehen. – dmahapatro

+0

danke was ich tue, um zu lernen, wie es sich verhält, kopieren Sie Ihren Code in eine saubere groovy Konsole einfügen und versuchen, es mit einer Textdatei zu bearbeiten, die ich bereits in einem bestimmten Verzeichnis habe, zu versuchen, zu verstehen, wie es funktioniert . aber bis jetzt konnte ich es nicht zur Arbeit bringen. Wie ich schon sagte, ich habe diese Sprache noch nie zuvor gesehen und alles, was ich getan habe, habe ich selbst gemacht, indem ich auf Google gelesen und geforscht habe. – geretd

26

Als Alternative zu die gesamte Datei in den Speicher zu laden, können Sie jede Zeile wiederum tun

new File('destination.txt').withWriter { w -> 
    new File('source.txt').eachLine { line -> 
    w << line.replaceAll('World', 'World!!!') + System.getProperty("line.separator") 
    } 
} 

Natürlich ist diese (und dmahapatro's answer) verlassen sich auf die Worte Sie ersetzen nicht übergreifende Linien

+7

Meiner Erfahrung nach verschlingt diese Lösung den Linienseparator. Zeile 3 als w << line.replaceAll ('World', 'World !!!') + System.getProperty ("line.separator") funktioniert besser. +1 sowieso. –

+0

danke @OutfastSource, ich habe das bearbeitet, um niemanden zu verletzen. – tedder42

20

Wie bei fast allem Groovy ist AntBuilder am einfachsten Route:

ant.replace(file: "myFile", token: "NEEDLE", value: "replacement") 
+0

Das war die Antwort, die ich suchte. Ich wusste, dass es eine One-Line-Lösung dafür gab, aber ich konnte mich nicht daran erinnern. Das hat perfekt für mich funktioniert. Vielen Dank. – MxNx

+0

Funktioniert es mit Regex? –

+0

Betrachtet man die Dokumente, würde ich nein sagen: https://ant.apache.org/manual/Tasks/replace.html –

4

Ich benutze diesen Code in bestimmten Datei Port 8080 auf $ {port.http} direkt zu ersetzen:

def file = new File('deploy/tomcat/conf/server.xml') 
    def newConfig = file.text.replace('8080', '${port.http}') 
    file.text = newConfig 

Die erste Zeichenkette liest in Variable eine Zeile der Datei. Die zweite Zeichenfolge führt eine Ersetzung durch. Die dritte Zeichenfolge schreibt eine Variable in eine Datei.

+0

könnte dies auch aktualisieren, um 'replaceAll' zu verwenden – deepelement

0

andere einfache Lösung wäre nach Schließung:

def replace = { File source, String toSearch, String replacement -> 
     source.write(source.text.replaceAll(toSearch, replacement)) 
    } 
Verwandte Themen