У меня есть программа ниже, я могу проанализировать шаблон, например convert(a.ACCOUNT_ID, string)
, на выражение, но я хочу заменить этот шаблон на CAST(a.ACCOUNT_ID AS VARCHAR)
. Я могу проанализировать полученное выражение и заменить строки указанным выше, но есть такие выражения, поэтому я не хочу этого делать .. Есть ли способ, которым я могу заменить шаблон? Например, если я найду образец как convert(a.ACCOUNT_ID, string)
, замените его на CAST(a.ACCOUNT_ID AS VARCHAR)
import scala.util.parsing.combinator._
import scala.util.parsing.combinator.lexical._
import scala.util.parsing.combinator.syntactical._
import scala.util.parsing.combinator.token._
import scala.util.parsing.input.CharSequenceReader
trait QParser extends RegexParsers with JavaTokenParsers {
def knownFunction: Parser[Any] = ident ~ "(" ~ ident ~ ("." ~ ident <~ "," ~ ident ~ ")")
def parse(inputString: String): Any = synchronized {
phrase(knownFunction)(new CharSequenceReader(inputString)) match {
case Success(result, _) => result
case Failure(msg,_) => throw new DataTypeException(msg)
case Error(msg,_) => throw new DataTypeException(msg)
}
}
class DataTypeException(message: String) extends Exception(message)
}
object Parser extends QParser {
def main(args: Array[String]) {
println(parse("convert(a.ACCOUNT_ID, string)"));
}
}
Выход: (((convert~()~a)~(.~ACCOUNT_ID))
convert(a.ACCOUNT_ID, string)
наCAST(a.ACCOUNT_ID AS VARCHAR)
? Что вы хотите разобрать на одно и то же представление? В этом случае следует отметить, что вы вообще не анализируетеCAST(a.ACCOUNT_ID AS VARCHAR)
. - person sepp2k   schedule 20.07.2015convert(ident.ident, ident)
ex. выберите convert (a.ACCOUNT_ID, string) из двойного. Я хочу преобразовать его, чтобы выбрать приведение (a.ACCOUNT_ID AS VARCHAR) из двойного - person Sathish   schedule 20.07.2015