sábado, 25 de junio de 2022

Curso avanzado de C#. Formateo de cadenas

 Formatear valores

Dar formato a un valor para su visualización es una conversión de tipo particularmente importante. Hasta que no se convierta una variable Datetime, decimal o double en algún tipo de cadena, no podremos mostrarla al usuario. Dos de los métodos más útiles para formatear valores como cadenas son ToString y String. Métodos que se describen a continuación.  

ToString 

El objeto de la clase proporciona un método ToString que heredan todas las demás clases. De forma predeterminada, este método devuelve el nombre del tipo de un objeto como una cadena, pero la mayoría de las clases para las que tiene sentido anulan este método para devolver el valor del objeto como una cadena. 

Por ejemplo, si una variable float tiene el valor 1,23, el método ToString devuelve el valor "1,23" como cadena. Por el contrario, si definimos una clase empleado, de forma predeterminada el método ToString devuelve el nombre de la clase, que es similar a WindowsFormsApplication1.Employee. Si utilizamos el método ToString de una variable sin parámetros, obtenemos una representación predeterminada de su valor. El método ToString también podemos tomar como parámetros un proveedor de formato, una cadena de formato o ambos. Al utilizar la cadena de formato, podemos personalizar el texto resultante. Por ejemplo, si la variable costo es un valor flotante (float), la declaración cost.ToString ("0.00") produce una cadena que contiene el valor del costo que se muestra con 2 posiciones decimales. 

Curso avanzado de C#. Formateo de cadenas


String.Format

El método ToString nos permite convertir el valor de una sola variable en una cadena. El método de formato estático de la clase String nos permite crear una cadena que puede contener los valores de muchas variables formateadas de diferentes maneras. El método String.Format tiene algunas versiones sobrecargadas, pero la más común toma como parámetros una cadena de formato y uno o más argumentos que se utilizan para completar elementos dentro de la cadena de formato. Cada elemento en la cadena de formato tiene la siguiente sintaxis de formato compuesto: 

{index [,length] [:formatString]} 

Aquí, índex es el índice de base cero de un parámetro que sigue a la cadena de formato que debe usarse para este elemento; length es la longitud mínima del resultado del elemento; y formatString es una cadena de formato estándar o personalizada para el elemento. Si la longitud es negativa, el valor se alinea a la izquierda dentro de su longitud.

Esto formalmente lo hace parecer confuso, pero en realidad no es tan mala. El siguiente código muestra un ejemplo sencillo. 

int i = 163; 

Console.WriteLine(string.Format("{0} = {1,4} or 0x{2:X}", (char)i, i, i)); 

Utilizamos string.Format para formatear una línea que escribe en la ventana de Salida.

La cadena de formato es {0} = {1,4} or 0x{2:X}. Esta cadena tiene tres elementos de formato que significan: 

{0} muestra el argumento 0 como formato predeterminado 

{1,4} muestra el argumento 1 en un campo de al menos cuatro caracteres de ancho 

{2: X} muestra el argumento 2 con formato cadena X (que muestra un número entero en hexadecimal)

Los otros caracteres dentro de la cadena de formato (=, y or x) se incluyen en la salida tal como aparecen en la cadena de formato. 

Los parámetros que vienen después de la cadena de formato son los argumentos que deben usarse con la cadena de formato. El primer argumento convierte el entero i en un carácter. El segundo y tercer argumento son simplemente la variable i. El resultado es que esta línea muestra el valor 163 convertido en un carácter, luego como un valor decimal y luego en hexadecimal. A continuación se muestra el resultado: 

£ = 163 or 0xA3 

No es necesario utilizar un argumento en la cadena de formato. Los argumentos también se pueden usar en cualquier orden y se pueden usar repetidamente, por lo que la siguiente declaración es válida: 

string text = string.Format("{1} {4} {2} {1} {3}", 

"quién", "yo", "luego", "soy", "pienso"); 

Si utilizamos String.Format para concatenar una serie de declaraciones y producir resultados es en gran parte una cuestión de preferencia personal. 

Formateo de cadenas 

Tanto los métodos ToString como String.Format pueden tomar cadenas de formato como parámetros para indicarles cómo formatear un valor. Para String.Format, esto se refiere a la cadena de formato dentro de los elementos de formato. Por ejemplo, en la declaración string.Format("0x{0:X}", 90) , la cadena de formato es la X dentro de las llaves. Las cadenas de formato se dividen en dos categorías generales: 


Las cadenas de formato estándar permiten determinar  cómo queremos que se muestre un valor en un nivel alto.

Las cadenas de formato estándar tienen en cuenta la configuración regional, por lo que permiten que el programa produzca una salida que sea apropiada para la configuración regional del ordenador. Por ejemplo, la  cadena de formato de fecha "d" indica un patrón de  fecha corto y produce un resultado similar al 4/7/2022 en los Estados Unidos o al 7/04/2022 en España. 

Las cadenas de formato personalizadas nos permiten  crear formatos que no son proporcionados por las  cadenas de formato estándar. Por ejemplo, la siguiente declaración produce un resultado similar a:  Son las 12  en punto.

Console.WriteLine(string.Format("Son     las {0:HH} en punto",DateTime.Now)); 

Podemos usar cadenas de formato personalizadas para producir resultados que sean similares a los producidos por las cadenas estándar, pero debemos utilizar las cadenas estándar siempre que sea posible para obtener los cambios apropiados si nuestro programa se ejecuta en un ordenador que este configurada para una configuración local diferente. 

Los métodos ToString y String.Format comprenden cientos de cadenas de formato estándar y personalizadas. La tabla siguiente enumera las cadenas de formato estándar más útiles para valores numéricos y Datetime

Cadenas de formatos para números estándard

 

Formato

Descripción

Ejemplo

C o c

Moneda

12.345,67  €

D o d

Decimal, sólo tipos enteros

12345

E o e

Notación científica

1.234567E+004

F o f

Punto fujo

12345,67

G o g

General (punto fijo o científico, lo que sea más corto)

12345,67

N o n

Número con decimales y separadores de miles

12.345,67

P o p

Porcentaje (multiplicado por 100 y añadido %)

0,12 se convierte en 12 %

X o x

Hexadecimal (sólo tipos integer)

3039

 

Algunos de estos formatos pueden tener un especificador de precisión opcional que controla el número de dígitos desplegado. Para la mayoría de estos tipos, el especificador de precisión indica el número de dígitos que se mostrarán después de la coma. Por ejemplo, si el valor es 12345,67, value.ToString ("C4") produce 12.345,6700 €.

Para la notación científica, el especificador de precisión indica el número de dígitos después de la coma en la mantisa. Por ejemplo, si el valor es 12345,67, value.ToString ("E2") produce 1,23E + 004.

Cadenas de formato para Datetime

 

Formato

Descripción

Ejemplo

d

Fecha corta

7/04/2022

D

Fecha larga

Jueves 7 de abril de 2022

f

Completa con hora corta

Jueves 7 de abril de 2022 14:23

F

Completa con hora larga

Jueves 7 de abril de 2022 14:23:16

g

General con hora corta

7/04/2022 14:23

G

General con hora larga

7/04/2022 14:23:16

m o M

Dia/ mes

7 /Abril

t

Hora corta

14:23

T

Hora larga

14:23:16

y o Y

Mes / año

Abril 2022

Además de estos formatos estándar, la estructura DateTime proporciona cuatro métodos que producen una salida similar a los especificadores de formato d, D, t y T. Estos métodos son ToShortDateString, ToLongDateString, ToShortTimeString y ToLongTimeString. 

Ejemplo Visualización de valores de moneda 

Modificamos el formulario de entrada de pedidos que creamos para el Manejo Valores porcentuales para que muestre el precio extendido, el subtotal, el impuesto sobre las ventas y el total general en formato de moneda.

Solución: El programa ya usa el método ToString para mostrar esos valores. El único cambio necesario es pasar la cadena de formato de moneda "C" a esas llamadas a ToString. Por ejemplo, el siguiente código muestra cómo el programa muestra el Gran Total en formato de moneda:

txtTotal.Text = Total.ToString("C"); 


No hay comentarios:

Publicar un comentario