Я застрял в проблеме, где мне нужно разделить файл с фиксированной шириной.Каждое поле может быть идентифицировано по его первому символу.
Файл содержит несколько форматов, например, формат первой строки: {1, 11, 12}, а формат второй строки: {1, 10, 12}.Оба идентифицируются с первым персонажем.
AFirstField SecondFields
BBField SecondFields
Однако иногда строка может содержать меньше символов, как показано ниже.
AFirstField S
Пока я пробовал использовать анализатор текста, получающий текущую строку и проверяющий первый символвыбрать формат, но приложение перестает работать, потому что иногда в строках содержится меньше данных, как в приведенном выше примере A.
string[] data;
using (TextFieldParser myReader = new TextFieldParser(filePath))
{
myReader.TextFieldType = FieldType.FixedWidth;
while (!myReader.EndOfData)
{
currentLine = myReader.ReadLine();
recordType = currentLine[0].ToString();
if (!recordType.Equals("H"))
{
myReader.FieldWidths = returnLineFormat();
myReader.HasFieldsEnclosedInQuotes = true;
data = myReader.ReadFields();
//if (recordType.Equals("R"))
//{
// ISD.Add(data);
//}
}
}
}
private int[] returnLineFormat()
{
int[] format = null;
if ((recordType == "A"))
{
format = new int[] { 1, 11, 12};
}
else if ((recordType == "B"))
{
format = new int[] { 1, 10, 12};
}
return format;
}
Это ошибки, которые я получаю из-за того, что в строке меньше материала: Строка 3невозможно проанализировать с использованием текущих значений FieldWidths.
Есть ли способ обойти эту проблему?