Tout d'abord, je suis nouveau à Scala. J'essaye de faire un analyseur de modèle dans Scala (semblable à Smarty (PHP)). Il doit rechercher dans le document, en remplaçant tout ce qui se trouve dans les balises "{{}}", par tout ce qui est fourni dans HashMap.Scala - replaceAllIn
Je suis actuellement coincé ici:
import scala.collection.mutable.HashMap
import scala.io.Source
class Template(filename: String, vars: HashMap[Symbol, Any]) {
def parse() = {
var contents = Source.fromFile(filename, "ASCII").mkString
var rule = """\{\{(.*)\}\}""".r
//for(rule(v) <- rule findAllIn contents) {
// yield v
//}
//rule.replaceAllIn(contents,)
}
}
var t = new Template("FILENAME", new HashMap[Symbol, Any])
println(t.parse)
est la partie que je l'ai fait remarquer des choses que j'ai pensé à faire.
Merci
Je suis venu un peu plus loin ...
import scala.collection.mutable.HashMap
import scala.io.Source
import java.util.regex.Pattern
import java.util.regex.Matcher
class Template(filename: String, vars: HashMap[Symbol, Any]) {
def findAndReplace(m: Matcher)(callback: String => String):String = {
val sb = new StringBuffer
while (m.find) {
m.appendReplacement(sb, callback(m.group(1)))
}
m.appendTail(sb)
sb.toString
}
def parse() = {
var contents = Source.fromFile(filename, "ASCII").mkString
val m = Pattern.compile("""\{\{(.*)\}\}""").matcher(contents)
findAndReplace(m){ x => x }
}
}
var t = new Template("FILENAME.html", new HashMap[Symbol, Any])
println(t.parse)
Au moment juste ajoute actuellement tout ce qui était à l'intérieur de l'étiquette, de retour dans le document. Je me demande s'il y a une façon plus simple de faire une expression rationnelle de style find-and-replace dans Scala?
Je suis désolé - Quelle est votre question? –
Dans le document, il y aura des variables entourées de "{{" et "}}" par ex. "{{ prénom }}". J'ai besoin de trouver le meilleur moyen d'échanger chaque instance de "{{WHATEVER}}" avec une valeur dans le hashmap. –