Обновление для моих оригинальных проблем
Ну, может быть, я не описал мою проблему полностью раньше.Извините за все!Вот настоящая проблема:
У меня есть текстовый файл, содержащий данные патента, такие как:
1/1523 DWPI
AP - JP29446999A 19991015
PN - JP2000188399 A 20000704 DW200044 JP4568930B2 B2 20101027 DW201071
AN - 2000495116
PA - (NPDE) DENSO CORP
PR - JP1998000295406 19981016 * 10191020 * MC - U11-C18A3, U12-D02A
OPD - 1998.10.16
ICAI - H01L29 / 12, H01L29 / 78, H01L21 / 265, H01L21 / 336
TI - Металлооксидный полупроводниковый полевой транзистор плоского типа
AB - <-контроль для простоты исключено->
CPY - NPDE
FN - JP2000188399
Имеется 1523 элемента с аналогичным форматом.Я хочу проанализировать патентные данные, поэтому мне нужно проанализировать данные.Я определил тип данных для каждого поля, например:
data AP = AP String Day String
data PN = PN String Day String
data AN = AN String
data PD = PD day
.... -- many other data types are not shown just for simplicity.
Теперь я написал синтаксический анализатор для каждого поля с megaparsec
, напримеркак apField
, pnField
, anField
и т. д.
Однако, не каждая запись имеет одинаковое поле, например, 2-й элемент может содержать только поля AP, PN, PA, PR,OPD, TI, AB, CPY и FN, при этом отсутствуют AN, MC и ICAI.Кроме того, кто-то может быть заинтересован в разных полях, и он просто экспортирует текстовый файл, содержащий записи только с полями AP, PN, PA, OPD и CPY.
Теперь я хочу написать общий код, который может анализировать записи с интересующими их полями и записывать результат анализа в базу данных SQLite
.
Например, если я хочу проанализировать записи с полями AP, PN, PA, OPD и CPY, я могу создать анализатор записей в соответствии с вводом, например toParser "ap,pn,pa,opd,cpy"
или toParser "ap,pa,cpy"
,который я понял.Анализируемый результат должен быть Record AP PN PA OPD CPY
или Record AP PA CPY
соответственно.Затем я хотел бы записать проанализированные результаты в базу данных.Поскольку каждая запись в данных соответствует типу данных Record
, и анализируемая запись может быть разной, Мне необходимо создать тип данных Record
с различными полями в зависимости от ввода пользователя .Это проблема, с которой я столкнулся.
Я могу обойти ее, определив все типы данных поля как data Field = Field [String]
и запись как data Record = Record [Field]
.Однако мне нужно больше контроля над типом данных, таким как день как тип Day
и номер идентификатора как тип Int
.
Если создается тип данных Record
с различными полями в зависимости отввод невозможен, может быть есть другие способы решения моей проблемы.Я ценю любые советы!И извините за длинное описание моей проблемы и мои неоднозначные описания моей проблемы раньше!