FileHelpers: cómo omitir la primera y última línea leyendo texto de ancho fijo
Frecuentes
Visto 13,521 veces
18
El siguiente código se usa para leer el archivo de texto de contenido de archivo cargado de ancho fijo usando FileHelpers en ASP .NET MVC2
Las longitudes de la primera y la última línea son más pequeñas y ReadStream causa una excepción debido a esto. Todas las demás líneas tienen el ancho fijo adecuado. ¿Cómo omitir la primera y la última línea u otra forma de leer datos sin excepción?
[FixedLengthRecord()]
class Bank
{
[FieldFixedLength(4)]
public string AINETUNNUS;
[FieldFixedLength(16)]
public string TEKST1;
[FieldFixedLength(3)]
public string opliik;
[FieldFixedLength(2)]
public string hinnalis;
};
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public ActionResult LoadStatement(HttpPostedFileBase uploadFile)
{
FileHelperEngine engine = new FileHelperEngine(typeof(Bank));
var res = engine.ReadStream(new StreamReader(uploadFile.InputStream,
Encoding.GetEncoding(1257))) as Bank[];
}
3 Respuestas
43
Puedes usar estos atributos
IgnorarPrimero: Indica el número de líneas que se ignorarán al comienzo de un archivo o secuencia cuando el motor lo lea.
[IgnoreFirst(1)]
public class OrdersVerticalBar
{ ...
Ignorar último: indica el número de líneas que se ignorarán al final de un archivo o secuencia cuando el motor lo lea.
[IgnoreLast(1)]
public class OrdersVerticalBar
{ ...
Puede acceder a los valores más tarde con
engine.HeaderText
engine.FooterText
Respondido el 12 de junio de 12 a las 21:06
3
Podrías usar el BeforeReadRecord evento para comprobar el formato de la línea. Selecciona el SkipThisRecord
propiedad en los datos del evento si es el primer registro. Determinar si es el último registro es un problema, pero podría verificar la longitud o el formato en su lugar. Por supuesto, eso evitará que detecte errores causados por registros mal formados.
Otra posibilidad es cargar todo el archivo en la memoria usando File.ReadAllLines
. Elimine el primer y el último elemento de la matriz resultante, vuelva a convertirlo en una cadena y luego llame LeerCadena. O puede escribir las cadenas en un MemoryStream
y llama ReadStream
.
Respondido el 13 de junio de 17 a las 14:06
404s en ambos enlaces. - solo Steve
@justSteve: Enlaces rotos arreglados. La documentación de FileHelpers está en filehelpers.net/docs/html/R_Project_FileHelpers.htm - jim mischel
1
lo mejor es decorar tu clase con el atributo [IgnorarPrimero].
Si por alguna razón no puede agregar el atributo, puede hacer algo como esto
var engine = new FileHelperEngine<T>();
engine.BeforeReadRecord += (e, args) =>
{
if (args.LineNumber == 1)
args.SkipThisRecord = true;
};
Respondido 02 Feb 18, 18:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# asp.net-mvc filehelpers or haz tu propia pregunta.
Gracias. En realidad, los archivos pueden estar en dos formatos diferentes: ancho fijo como se describe en la pregunta y en formato de registro donde cada campo está en una línea separada. Los campos también son diferentes en ambos formatos, por lo que se deben usar dos modos de lectura diferentes. El formato de ancho fijo siempre contiene "VV" al comienzo de cada línea. ¿Cómo examinar el flujo antes de leer y aplicar un modo de lectura diferente según el formato? - Andrus
motor.Opciones.IgnorarPrimerasLíneas = 1 - héroe cero