Sunday, December 09, 2007

Convertir cadenas a texto capital

Muchas veces queremos formatear una cadena en caracteres con la primera letra de cada palabra en mayúsculas. Esto puede hacerse muy fácilmente con un poco de código, pero no siempre querremos que todas la letras sean convertidas, por ejemplo un artículo (el, la , los, etc) u otra palabra que no deba ser convertida. Por ejemplo, podemos tener el siguiente título:
"Declaración Jurada De Liquidación De Sueldos Para La Planilla Anual De La Empresa"

Puede ser que se vea mejor de la siguiente manera:
"Declaración Jurada de Liquidación de Sueldos para la Planilla Anual de la Empresa".

Para ello explicaré el siguiente código desarrollado en C#:

Primero que nada se tiene la enumeración CaracterNoCapital, la misma que define el conjunto de palabras que no serán convertidas a caracter capital.



public enum CaracterNoCapital
{
a = 1,
al,
con,
de,
del,
el,
ello,
en,
es,
la,
le,
las,
lo,
los,
mi,
no,
por,
para,
que,
te,
se,
si,
su,
un,
una,
y,
}


luego se tiene la clase Capital, la que expone un sólo método público estático, que requiere un texto a ser transformado y devuelve la cadena formateada. El código a continuación ha sido documentado en sus líneas para ser comprendido.


public class Capital
{
public static string ConvierteACapital(string pTexto)
{
// Se obtiene la coleccion de strings formateada
string[] partesCadena = FormatearCadena(pTexto);

//letraCapital = "";
string primeraLetra = "";
bool esCaracterNoCapital = false;

CaracterNoCapital miEnum = new CaracterNoCapital();
// Se obtienen los elementos de la enumeracion EnumCaracteresNoCapital
string[] enumArray = Enum.GetNames(miEnum.GetType());

for (int i = 0; i < escaracternocapital =" false;" a ="="" escaracternocapital =" true;" i ="="" primeraletra =" (partesCadena[i][0].ToString()).ToUpper();" aux =" 0;" letracapital =" new">= partesCadena.Length-2 )
letraCapital.Append(parte);
else
{
letraCapital.Append(parte);
letraCapital.Append(" ");
}
aux++;
}

return letraCapital.ToString();
}

private static string[] FormatearCadena(string pCadena)
{
// Se eliminan los espacios de los extremos de la cadena
pCadena = pCadena.ToLower().Trim();
// Se separa por el caracter ' '
string[] split = pCadena.Split(' ');

string textoParaSeparar = "";

foreach (string parteCadena in split)
{ // Se omiten espacios extra innecesarios
if (parteCadena != ""){
// Se añade cada parte de la cadena que no sea vacio
textoParaSeparar += parteCadena + "^";
}
}
// finalmente se separa el texto por el caracter "^"
string[] partesCadena = textoParaSeparar.Split('^');
return partesCadena;
}
}



Puntos clave
El algoritmo tiene por objetivo general aceptar una cadena, convertir a minúsculas toda la cadena, eliminar espacios en blanco, separar la cadena en palabras, identificar las palabras no capitales(definidos en la enumeración CaracterNoCapital) y finalmente formatear la cadena.

2 comments:

Rod said...

Excelente! el metodo Probarsaltocurso ahora ponerlo en practica. Gracias
http://rodrigo-ti.blogspot.com

Anonymous said...
This comment has been removed by a blog administrator.