jueves, 6 de julio de 2023

Caracteres válidos

Muchas veces cuando se procesa un archivo desde nuestra aplicación; ya sea un .txt, .csv, .xls, etc.; necesitamos controlar ciertos caracteres que pueden grabarse en tablas y que no son compatibles. Un ejemplo claro es la letra "Ñ", "ñ" o algunos tipos de tildes (acentos) y cualquiera sea el caso muchas veces se guardan símbolos medios raros que después quedan reflejados en Grillas o Reportes y que no se ven bien.

Es por eso que acá dejo un código, que me ha servido de mucho para sortear esas eventualidades al procesar información que llega desde otros medios de almacenamiento. Yo normalmente, lo utilizo como una Subrutina, pero a criterio de quién quiera incorporarlo dentro de su aplicación lo puede hacer como mejor y cómodo le sea. 

Variables:

&ii Tipo Numeric (4)
&largo Tipo Numeric (4)
&string Tipo Character (30)
&Posicion Tipo Character (1)

Código:

Sub 'CaracterValido'
&ii = 1 
&largo = &string.Length() 
do while &ii <= &largo 
&Posicion = &string.Substring(&ii, 1)
do case 
  case &Posicion = '¥'
        &string = strreplace(&string,&Posicion,'Ñ')
  case &Posicion = '^' 
  &string = strreplace(&string,&Posicion,'') 
  case &Posicion = '+' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '/' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '*' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '?' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = 'º' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '!' 
        &string = strreplace(&string,&Posicion,'') 
  case &Posicion = '#' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '%' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '&' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '(' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = ')' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '=' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '¿' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '<' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '>' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '@' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '\' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '~' 
        &string = strreplace(&string,&Posicion,'') 
  case &Posicion = '?' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '¬' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '{' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '}' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '[' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = ']' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '´' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = 'Ç' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = 'ç' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion='Á' or &Posicion='Â' or &Posicion='Ä'
  &string = strreplace(&string,&Posicion,'A') 
  case &Posicion = 'Ã'
&string = StrReplace(&string, &Posicion, '')
  case &Posicion='É' or &Posicion='Ê' or &Posicion='Ë' 
&string = strreplace(&string,&Posicion,'E') 
  case &Posicion='Í' or &Posicion='Î' or &Posicion='Ï' 
&string = strreplace(&string,&Posicion,'I') 
  case &Posicion='Ó' or &Posicion='Ô' or &Posicion='Ö' 
&string = strreplace(&string,&Posicion,'O') 
  case &Posicion='Ú' or &Posicion='Û' or &Posicion='Ü' 
&string = strreplace(&string,&Posicion,'U')
  case &Posicion='"' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '`' 
&string = strreplace(&string,&Posicion,'')
  case &Posicion = '`' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '´' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = '©' 
&string = strreplace(&string,&Posicion,'') 
  case &Posicion = "'" 
&string = strreplace(&string,&Posicion,'')
endcase 
&ii = &ii + 1 
enddo
endsub

Como se puede ver en el código a medida que se me presentaban caracteres extraño o que se grababan mal en la tabla iba agrregando nuevos "case ..." para reemplazarlos.
Como siempre digo se puede mejorar, cualquier critica es bienvenida, espero sirva y se comprenda el ejemplo.

No hay comentarios:

Publicar un comentario

Qué es un Queue!? ... en Clarion

Publicado por  EMoreno  el 11/01/2006 - LWP Hola que tal. Una QUEUE es una estructura en memoria. Puede ser de un campo hasta "n...