VARCELNOVAEXPRESSAO(expression,inicio,fim,substituto,listSep) ;========================================================================== ; ; DADA UMA EXPRESSÃO, PROCURA DENTRO DELA POR UM TOKEN, DELIMITADO POR ; inicio E fim, E SUBSTITUI ESTES POR substituto. ; ; RETORNA A NOVA EXPRESSÃO, SEGUIDA DA LISTA DE TOKENS ENCONTRADOS, ; USANDO COMO SEPARADOR, listSep ; ; POR EXEMPLO: ; SET A = "(0.30*([MO(I)]/[MO(0)])) + (0.70*([FAD(I)]/[FAD(0)]))" ; SET B= $$^VARCELNOVAEXPRESSAO(A, "[", "]", "?", "~") ; WRITE B ; (0.30*(?/?)) + (0.70*(?/?))~MO(I)~MO(0)~FAD(I)~FAD(0) ; ; ; Autor: Emilio Eiji Yamane ; Se quiser reproduzir, este código está licenciado sob a licença ; WTFPL - Do What The Fuck You Want To Public License ; http://sam.zoy.org/wtfpl/ ; ;========================================================================== ; new resultado, listExpr, expression2 set resultado = "" set listExpr = "" while($find(expression, inicio) '= 0) { set resultado = resultado _ $piece(expression, inicio, 1) _ substituto set expression2 = $extract(expression, $find(expression, inicio), $length(expression)) set listExpr = listExpr _ listSep _ $piece(expression2, fim, 1) set expression = $extract(expression2, $find(expression2, fim), $length(expression2)) } set resultado = resultado _ expression quit resultado _ listExpr