.net - ponerse - FileHelpers y CSV: qué hacer cuando un registro puede expandirse sin límites, horizontalmente
expansor de 8 (2)
Podría crear una clase MyRecord
que contenga todos los valores potenciales, por ej.
[DelimitedRecord(",")]
public class MyRecord
{
public string Name;
public int Value1;
.....
[FieldOptional]
public int Value5;
......
[FieldOptional]
[FieldNullValue(typeof(int), "-1" )]
public int Value14;
}
y hacer que la mayoría de esos campos sean opcionales (n. ° 5 a 14 en mi ejemplo) y combinarlos con, por ejemplo, un FieldNullValue
para manejar esos campos no existentes (o convertir esos campos opcionales en nullable int:
public int? Value5
Estoy tratando de analizar este tipo de archivo CSV con FileHelpers:
Tom,1,2,3,4,5,6,7,8,9,10
Steve,1,2,3
Bob,1,2,3,4,5,6
Cthulhu,1,2,3,4,5
Greg,1,2,3,4,5,6,7,8,9,10,11,12,13,14
No puedo entender cómo analizar esto con FileHelpers. Me imagino que debería ser capaz de hacer algo como esto:
[DelimitedRecord(",")]
public class MyRecord
{
public string Name;
public List<int> Values;
}
Pero eso no parece ser posible con FileHelpers. Lo mejor que puedo hacer es esto:
[DelimitedRecord(",")]
public class MyRecord
{
public string Name;
public string Values;
public string[] ActualValuesInNiceArray
{
get { return Values.Split(new[] {'',''}, StringSplitOptions.RemoveEmptyEntries); }
}
}
Entonces necesitaría dividir los Values
en comas para obtener el conjunto de valores para cada registro. No parece ser muy útil utilizar FileHelpers si tengo que analizar manualmente una parte de cada registro.
¿Me estoy perdiendo de algo? Revisé documentos / ejemplos, pero parece que no puedo encontrar una solución para mi formato. Excel no tiene problemas con mi formato, así que me imagino que hay una manera de hacerlo con una biblioteca libre existente (FileHelpers o alguna otra biblioteca). ¿Algunas ideas?
Puede usar un campo de matriz y la biblioteca hará el trabajo:
[DelimitedRecord(",")]
public class MyRecord
{
public string Name;
public int[] Values;
}
Incluso puede usar [FieldArrayLength (2, 8)]
[DelimitedRecord(",")]
public class MyRecord
{
public string Name;
[FieldArrayLength(2, 8)]
public int[] Values;
}
Establece el número mínimo / máximo de valores
Recomiendo descargar la última versión de la biblioteca desde aquí:
http://teamcity.codebetter.com/viewType.html?buildTypeId=bt65&tab=buildTypeStatusDiv
Verifique la sección de artefactos