Quantcast
Channel: Leer CSV
Viewing all articles
Browse latest Browse all 13

Leer CSV

$
0
0
HOla Alberto y como configuro eso?

Hay MUCHAS formas de hacerlo dependiendo de qué haga el programa: cuántas conversiones tiene que hacer, en qué momentos tiene que hacerlas, cuáles son los criterios sobre el formato que se va a convertir, si va a tener que funcionar con distintas configuraciones de sistema, etc. Recomiendo que estudies el tema de la globalización de aplicaciones con cierta profundidad y no hagas estas cosas "a ciegas", simplemente copiando una o dos líneas de ejemplo que te proporcionen en un foro, porque a la larga acabarás teniendo problemas en un sitio u otro si no tienes claramente controlado lo que haces.

Pero, en fin, en este caso en particular, si quieres una solución rápida, una forma de forzar a que la conversión use siempre un formato concreto es pasarle un parámetro adicional al "decimal.Parse". El método tiene una sobrecarga con este formato:

Parse(String, NumberStyles, IFormatProvider)

El tercer parámetro es una instancia de cualquier clase que implemente IFormatProvider. Y una clase que implementa esta interfaz es CultureInfo. Y puedes instanciar CultureInfo usando un código de país. Si eliges un país que tenga el formato deseado, entonces te toma ese formato para los números. Por ejemplo, si tienes que "Parsear" cantidades que tengan una coma decimal y el símbolo de Euro, puedes usar el CultureInfo de España:

CultureInfo ci = new CultureInfo("es-ES");

... Decimal.Parse(fila[6].etc.etc, NumberStyles.Any, ci) ...

Por supuesto, si quieres otro formato (por ejemplo, en tu caso creo que quiers un punto y no una coma), entonces tienes que cambiar el "es-ES" por el código del país en el que se use el formato que deseas que se use en el Parse.

Si tienes un formato "raro", por ejemplo la moneda de un país pero el separador decimal de otro, entonces en lugar de usar el IFormatProvider puedes dejar el Replace tal como lo tenías, pero en lugar de reemplazar el punto por una coma, reemplaza el punto por el separador decimal que esté en ese momento configurado para tu programa. Si no me equivoco, puedes obtenerlo mediante

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator

o algo parecido. Lo he escrito de memoria, así que puede tener algún errorcillo. No te fíes de lo que he escrito, búscalo en la documentación por si acaso no es exactamente igual, y pruébalo con el debugger para cerciorarte de que efectivamente devuelve una coma al ejecutarlo en tu equipo.



Viewing all articles
Browse latest Browse all 13


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>