Tengo una lista de valores enteros (Lista) y me gustaría generar una cadena de valores delimitados por comas. Es decir, todos los elementos de la lista salen a una sola lista delimitada por comas.
Mis pensamientos ... 1. pasar la lista a un método. 2. Use el generador de cadenas para iterar la lista y agregar comas. 3. Pruebe el último carácter y, si es una coma, elimínelo.
¿Cuáles son tus pensamientos? Es esta la mejor manera?
¿Cómo cambiaría mi código si quisiera manejar no solo enteros (mi plan actual) sino cadenas, largos, dobles, bools, etc., etc. en el futuro? Supongo que acepte una lista de cualquier tipo.
List<int>
no tiene métodoSelect
en el marco 3.5 a menos que me falte algo.using
declaración.System.Linq.Enumerable
(y, por supuesto, necesitaráSystem.Core.dll
ensamblarlo, pero presumiblemente ya lo tiene). Ya ves,List<int>
nunca tieneSelect
como método. Más bien, seSystem.Linq.Enumerable
defineSelect
como un método de extensiónIEnumerable<T>
, del cualList<int>
es un ejemplo de. Por lo tanto, necesitaSystem.Linq.Enumerable
en sus importaciones elegir este método de extensión.x.ToString(CultureInfo.InvariantCulture)
. Esto usará el punto como separador decimal.en 3.5, todavía podía hacer esto. Es mucho más simple y no necesita lambda.
fuente
ToArray()
El método deList<int>
no se puede utilizar con el argumento de tipo en el marco 3.5 a menos que me falte algo.Puede crear un método de extensión al que pueda llamar en cualquier IEnumerable:
Luego puede llamar al método en la lista original:
fuente
Puedes usar
String.Join
.fuente
ConvertAll
aquí, ambosint
ystring
se deducirán.Array.ConvertAll(...' you can just do
list.ConvertAll (e => e.ToString ()). ToArray) `, simplemente escribe menos.Si algún cuerpo desea convertir una lista de objetos de clase personalizados en lugar de una lista de cadenas , anule el método ToString de su clase con la representación de fila csv de su clase.
Luego, el siguiente código se puede utilizar para convertir esta lista de clases a CSV con columna de encabezado
fuente
Como el código en el enlace proporcionado por @Frank Create a CSV File from a .NET Generic List hubo un pequeño problema al finalizar cada línea con un
,
modifiqué el código para deshacerme de él. Espero que ayude a alguien.fuente
dev
existe, pero no el archivo ... ¿no estoy usando ese derecho?sw.Write(string.Join(",", props.Select(d => d.Name).ToArray()) + newLine);
No probado pero no sabe lo que está tratando de lograrLo explico en profundidad en esta publicación . Pegaré el código aquí con breves descripciones.
Aquí está el método que crea la fila del encabezado. Utiliza los nombres de propiedad como nombres de columna.
Este método crea todas las filas de valores
Y aquí está el método que los une y crea el archivo real.
fuente
|
archivos delimitados utilizando la versión mejorada. ¡Gracias!Cualquier solución solo funciona si Listar una lista (de cadena)
Si tiene una lista genérica de sus propios Objetos, como la lista (del automóvil) donde el automóvil tiene n propiedades, debe recorrer la información de propiedades de cada objeto del automóvil.
Mire: http://www.csharptocsharp.com/generate-csv-from-generic-list
fuente
Me gusta un buen método de extensión simple
Luego puede llamar al método en la lista original:
Más limpio y más fácil de leer que algunas de las otras sugerencias.
fuente
El problema con String.Join es que no está manejando el caso de una coma que ya existe en el valor. Cuando existe una coma, rodea el valor en Cotizaciones y reemplaza todas las Cotizaciones existentes con Cotizaciones dobles.
Ver módulo CSV
fuente
La biblioteca CsvHelper es muy popular en Nuget. ¡Vale la pena, hombre! https://github.com/JoshClose/CsvHelper/wiki/Basics
Usar CsvHelper es realmente fácil. Su configuración predeterminada está configurada para los escenarios más comunes.
Aquí hay algunos datos de configuración.
Actors.csv:
Actor.cs (objeto de clase personalizado que representa un actor):
Lectura del archivo CSV usando CsvReader:
var actoresList = csv.GetRecords ();
Escribir en un archivo CSV.
fuente
Por alguna razón, @AliUmair revirtió la edición a su respuesta que corrige su código que no se ejecuta tal como está, así que aquí está la versión de trabajo que no tiene el error de acceso al archivo y maneja adecuadamente los valores de propiedad de objeto nulo:
fuente
http://cc.davelozinski.com/c-sharp/the-fastest-way-to-read-and-process-text-files
Este sitio web realizó algunas pruebas exhaustivas acerca de cómo escribir en un archivo usando un escritor con búfer, la lectura línea por línea parece ser la mejor manera, el uso del generador de cadenas fue uno de los más lentos.
Utilizo mucho sus técnicas para escribir cosas para archivarlas, funcionan bien.
fuente
Un método de extensión ToCsv () de propósito general:
Ejemplos de uso:
Implementación
fuente
Aquí está mi método de extensión, devuelve una cadena por simplicidad, pero mi implementación escribe el archivo en un lago de datos.
Proporciona cualquier delimitador, agrega comillas a la cadena (en caso de que contengan el delimitador) y las ofertas serán nulas y en blanco.
Uso:
fuente