У меня есть необходимость анализировать (и создавать) текстовые сообщения фиксированной длины, которые в некоторых случаях могут содержать поля массива.
Пример:
PARTA LOTA 02SUBLOT1 SUBLOT2 03TEST1 RESULT1 TEST2 RESULT2 TEST3 RESULT3
Если бы это был объект, он мог бы использовать объект Lot ниже.
Номер детали (PARTA)
Номер лота (LOTA)
Массив из 2 объектов SubLot (SUBLOT1 с количеством 150 и SUBLOT2 с количеством 999)
Массив из 3 результатов испытаний (TEST1 с результатом 1234.67890, ...)
Обратите внимание, что в сообщении указывается количество элементов массива.
Я надеялся использовать библиотеку FileHelpers, о которой говорили люди, но она не поддерживает несколько полей массива, где есть другое поле, определяющее количество, и не поддерживает типы полей, которые сами по себе имеют атрибут [FixedLengthRecord ()].
Это то, что я хотел бы сделать. Обратите внимание, что длина поля, равная 10, является просто артефактом сохранения этого простого. Не все поля обычно имеют одинаковую длину.
[FixedLengthRecord()]
public class Lot
{
[FieldFixedLength(10)]
public string PartNumber { get; set; }
[FieldFixedLength(10)]
public string LotNumber { get; set; }
[FieldFixedLength(10)]
public SubLot[] SubLots { get; set; }
[FieldFixedLength(10)]
public Test[] Tests { get; set; }
}
[FixedLengthRecord()]
public class SubLot
{
[FieldFixedLength(10)]
public string SubLotNumber { get; set; }
[FieldFixedLength(10)]
public int Quantity { get; set; }
}
[FixedLengthRecord()]
public class Test
{
[FieldFixedLength(10)]
public string Description { get; set; }
[FieldFixedLength(10)]
public double Result { get; set; }
}
У кого-нибудь есть идеи, возможно ли это с помощью FileHelpers? Есть еще идеи? У меня много разных типов сообщений, поэтому я бы не стал кодировать их вручную. Метод украшения атрибутов в FileHelpers кажется отличным чистым решением, и я думаю просто расширить его, но я хочу убедиться, что я не пропустил лучшего решения.