Generar código con palabras exceptuando vocales

Hola javi, Quiero realizar lo siguiente:
1. De un campo llamado "marca" quiero generar un codigo, cuando el nombre de la marca no excede 5 caracteres simplemente el codigo es el mismo, pero si los excede que obtenga 5 letras del mismo, pero exceptuando las vocales si no es la inicial del nombre y guiones, ejemplo
marca = "abac"  (no excede 5 letras)  = codigo = "abac", eso lo genero asi
cod=marca
IF LEN(cod) <= 5
    codgen = cod
    replace cod_marca WITH codgen
endif
pero lo siguiente no se muy bien como hacerlo, sin tener que generar tanto codigo y condiciones:
marca = "abac-compressor" (excede 5 letras) codigo= "abccm" eliminar "segunda a, - ,o"
Si existiera agregar sufijo ascendente "abccm1", "abccm2", etc
2. Problema, precisamente importe la lista de las marcas desde un archivo excel con más de 800 registros, pero no encuentro manera de eliminar el espacio después de la palabra, he intentado de mil formas durante dos días, y no logro, no funcionan los STRTRAN, ni los ALLTRIM o funciones similares, la única forma que ha servido es reescribir el nombre, o desde un formulario ir al final y con la tecla "delete" eliminar los espacios finales, pero para ese caso de pasar por cada registro manualmente, yo mismo generaría el código y lo quiero evitar. Muchas gracias

1 respuesta

Respuesta
1
Para lograr quitar las letras de los datos tienes que usar el STRTRAN, este sería un ejemplo de una función que te lo haga (recuerda que para diferenciar mayúsculas y minúsculas debes usar UPPER() o LOWER() ):
replace cod_marca with strtran1(marca)
procedure strtran1
lparameter tcDato
lcAlias = alias()
lcDato = alltrim(tcDato)
lcDato = strtran(lcDato,"a","")
lcDato = strtran(lcDato,"e","")
lcDato = strtran(lcDato,"i","")
lcDato = strtran(lcDato,"o","")
lcDato = strtran(lcDato,"u","")
if len(lcDato)>5
    lcDato = left(lcDato,5)
endif
select TABLA_CONTROL  && esta es la tabla donde verifico si ya usé el código
locate for cod_marca == lcDato
if found()
       if val(right(cod_marca,1)) > 0
            lcDato = left(lcDato,4) + str(val(right(cod_marca,1))+1,1)
      endif
endif
if !empty(lcAlias) and used(lcAlias)
          select (lcAlias)
endif
return (lcDato)
* respecto al punto 2 no comprendo como no te funciona el alltrim, prueba con el procedimiento que te armé, agrega los caracteres que debes eliminar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas