jueves, 26 de noviembre de 2015

Cadenas de Caracteres y Manipulación de Texto en C# - Parte 1/5: Char

Índice

1. Introducción
2. Palabras Clave
3. El Tipo de Dato Char
3.1 Generalidades
3.2 La estructura Char
3.3 Alias char
4. Métodos de Manipulación de Caracteres
4.1 Métodos sobresalientes
4.2 Categorización granular de caracteres
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

Con este artículo C# se da inicio a la serie de Fundamentos de .NET Framework. Esta serie comprende el entendimiento teórico y práctico no sólo del lenguaje de programación C# sino además de los tipos de datos y las operaciones programáticas que se pueden llevar a cabo con éstos. Entre esas operaciones posibles se tiene: comparación de igualdad virtual, comparación por orden y conversión entre tipos de datos. Respecto a los tipos de .NET Framework que serán objeto de tratamiento en esta serie se hallan: String, DateTime y Enum. Esta primera parte comprende el uso de cadenas de caracteres y manipulación de texto; en particular el tipo de dato Char.

2. Palabras Clave

  • .NET Framework
  • Alias
  • Cadena de caracteres
  • Carácter
  • Estructura
  • Tipo de dato
  • Unicode

3. El Tipo de Dato Char

3.1 Generalidades

El tipo de dato Char ("Char Structure", 2015) y su homónimo (o alias) char ("char (C# Reference)", 2015) representan un carácter en el sistema de codificación Unicode ("Unicode", 2015). Esta estructura está definida en el nombre de espacio System. Ejemplos básicos de representación de caracteres con este tipo de dato:

char c = 'O';
char x = ' '; // El carácter espacio
char nuevaLinea = '\n'; // El carácter de nueva línea

3.2 La estructura Char

La estructura Char representa un carácter en la codificación UTF-16. En particular, esta estructura es usada por .NET Framework para representar la unidad básica de construcción de texto: el carácter. Cada carácter requiere hasta 16 bits en memoria. Sin embargo, existen caracteres que requieren dos unidades básicas para su representación, es decir 32 bits. De acuerdo con ("Char Structure", 2015), la composición anterior está definida a partir de un número de 21 bits que identifica unívocamente cada carácter en Unicode.

Continuando, en el caso del carácter ä se puede componer a partir de la conformación de los códigos U+0061 y +U0308. Esto queda más claro con el siguiente código C# de ejemplo:

Este programa basado en consola realiza las siguientes operaciones:
  • Línea 11: creación del flujo de escritura en un archivo de texto plano.
  • Línea 14: composición del carácter ä con los códigos Unicode +U0061 y U0308.
  • Línea 18: creación de cadenas de caracteres a partir de los códigos anteriores.
  • Línea 21: escritura del carácter ä en el archivo de texto plano.
Compilación:

csc /t:exe FormacionCaracteres.cs

Ejecución assembly:

.\FormacionCaracteres.exe

3.3  Alias char

El alias char se usa para crear instancias de la estructura System.Char. Mantiene el mismo esquema y requerimiento de memoria que su homónimo Char. Es posible asignar un valor en el rango Unicode U+0000 hasta U+FFFF para la representación del juego de carácteres de diferentes idiomas.

Los caracteres pueden formarse a partir de valores hexadecimales, código Unicode, valores enteros. Por ejemplo:

Operaciones a resaltar de este código:
  • Líneas 11-14: formación del carácter X a partir de distintas representaciones literales: explícita, hexadecimal, número entero y código Unicode.
  • Líneas 17-20: impresión del contenido del arreglo char caracteres.
Compilación:

csc /t:exe FormacionCaracteres.cs

Ejecución assembly:

.\FormacionCaracteres.cs

> Prueba de ejecución (Ideone.com):

4. Métodos de Manipulación de Caracteres

4.1 Métodos sobresalientes

La estructura System.Char y el alias char cuentan con una variedad de métodos static para la manipulación de caracteres. En la Tabla 1 (Albahari, 2012) se enlistan varios de los métodos implementados en esta estructura.
Métodos de System.Char
Tabla 1. Métodos de System.Char (Albahari, 2012).
Ejemplos básicos de manipulación de caracteres con métodos de System.Char:

Console.WriteLine (System.Char.ToUpper('o'));    // O
Console.WriteLine (char.IsWhiteSpace('\t'));     // True

Es importante tener en cuenta que estos métodos pueden mantener sutilezas dependiendo de la configuración regional del sistema. En el caso del método ToUpper y la configuración regional basada en turco, la expresión lógica:

char.ToUpper('i') == 'I';

genera como resultado false. Esto se debe a que la conversión a mayúscula del carácter i en turco da como resultado İ (nótese el punto sobre el carácter). Sin embargo, .NET Framework también provee métodos independientes de la cultura y configuración regional:

Console.WriteLine (char.ToUpperInvariant ('i'));    // I

La invocación de char.ToUpperInvariant ('i') produce el resultado lógico esperado respecto al alfabeto inglés internacional.

4.2 Categorización granular de caracteres

Cada uno de los métodos en la Tabla 1 incluye una tercera columna para discernir valores de la enumeración System.Globalization.UnicodeCategory ("UnicodeCategory Enumeration", 2015) para la categoría de los caracteres. Para obtener la categoría de un carácter se puede invocar al método GetUnicodeCategory.

5. Conclusiones

Se han explorado los elementos fundamentales de uso de caracteres y su representación en .NET Framework a través del tipo de dato System.Char y su alias char. En especial, se prestó atención al uso de distintas representaciones para la formación de caracteres y el uso de métodos para la manipulación de éstos. Se destacó las sutilizas que puede surgir con el uso de métodos dependientes de la configuración regional del sistema. Al final se mencionó en breve la categorización de caracteres. En el siguiente artículo de esta serie de manipulación de texto se estudiará el tipo de dato String.

6. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.
Char Structure (System) (2015, noviembre 25). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.char(v=vs.110).aspx.
char (C# Reference) (2015, noviembre 25). Recuperado desde: https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx.
Unicode (2015, noviembre 25). Recuperado desde: https://en.wikipedia.org/wiki/Unicode.
UnicodeCategory Enumeration (System.Globalization) (2015, 25 de noviembre). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.globalization.unicodecategory(v=vs.110).aspx.


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.