package vitry.prelude; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import vitry.runtime.Native; import vitry.runtime.StandardFunction; import vitry.runtime.VitryRuntime; import vitry.runtime.error.IOError; import vitry.runtime.error.InvocationError; import vitry.runtime.struct.Seq; /** * Utility to replace text in a file. */ public class replaceFile extends StandardFunction { public replaceFile() { super(3); } public Object apply(Object name, Object xs, Object ys) throws InvocationError { String name2 = (String) name; Seq<String> xs2 = Native.<String>unwrapAll((Seq<?>) xs); Seq<String> ys2 = Native.<String>unwrapAll((Seq<?>) ys); name2 = name2.replace("~", System.getProperty("user.home")); { try { File file = new File(name2); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = "", text = ""; while ( (line = reader.readLine()) != null) { Iterator<String> x = xs2.iterator(); Iterator<String> y = ys2.iterator(); while (x.hasNext() && y.hasNext()) { line = line.replaceAll(x.next(), y.next()); } text += line + "\n"; } reader.close(); FileWriter writer = new FileWriter(file); writer.write(text); writer.close(); } catch (IOException ioe) { throw new IOError(ioe); } } return VitryRuntime.NIL; } }