У меня есть текстовый файл, полный записей, где каждое поле в каждой записи является фиксированной шириной. Моим первым подходом было бы проанализировать каждую запись, просто используя string.Substring(). Есть ли способ лучше?Чтение записи фиксированной ширины из текстового файла
Например, формат может быть описан как:
<Field1(8)><Field2(16)><Field3(12)>
И пример файла с двумя записями может выглядеть следующим образом:
SomeData000000000SomeMoreData
Data2 0000000000555555MoreData
Я просто хочу, чтобы убедиться, что я не обойдена более элегантный способ, чем подстрока().
Update: я в конце концов пошел с регулярным выражением, как Killersponge предложил:
private readonly Regex reLot = new Regex(REGEX_LOT, RegexOptions.Compiled);
const string REGEX_LOT = "^(?<Field1>.{6})" +
"(?<Field2>.{16})" +
"(?<Field3>.{12})";
Затем я использую следующий доступ к полям:
Match match = reLot.Match(record);
string field1 = match.Groups["Field1"].Value;
Да, я пытался подумать о способе использования регулярного выражения, но думаю, что это неправильный инструмент для работы, и, как вы сказали, перебор. – 2008-10-02 14:59:24
regex?^(. {8}) (. {16}) (. *) $ Для указанного определения полей, считая, что последнее поле может быть или не быть дополнено пробелами. – Sekhat 2008-10-02 15:01:51