Лучший способ обработки сложных вложенных данных с использованием Perl
Я относительно новичок в программировании. Я должен обработать массивный файл, содержащий вложенные данные о супружеских парах, как показано ниже. Я пытался написать программу на Perl, но установка большого количества флагов для каждого из вложенных данных, начиная с {и заканчивая}}, не кажется эффективным способом обработки этих данных. Я ищу ваш совет о том, как лучше всего обрабатывать данные, как показано ниже в Perl.
Благодаря тонну. Энди
У меня есть некоторые данные, которые выглядят как ниже:
city{
area : 50 sq miles ;
population : 3000 ;
healthIndex : 90.5/100 ;
marriedCouples { //this begins one married couple data
children : 2 ;
chronologicalData() {
date: 02-10-1990 ;
incomeRising("TableVals") {
values("0 1 2 3 4 5 6 7 8 9") ;
}
incomeFalling("TableVals") {
values("0 1 2 3 4 5 6 7 8 9") ;
}
}
child {
name: Nathan;
chronologicalData() {
DOB: 02-13-1994 ;
incomeRising("TableVals") {
values("0 2 2 3 4 9 6 7 8 9") ;
}
incomeFalling("TableVals") {
values("0 1 2 1 1 1 6 7 8 9") ;
}
}
intrinsicVal() {
risingVals {
values("0 0.1 0.33 0.34 0.6 0.9 0.11 0.123 0.14 0.15") ;
}
fallingVals {
values("0.15 0.10 0.09 0.08 0.08 0.078 0.75 0.6 0.5 0.4") ;
}
}
}
} // this finishes one married couple data
child { //Note that this child is not within the married couple and is a stand-alone child. It is outside of it
name: Cody;
chronologicalData() {
DOB: 02-13-1974 ;
incomeRising("TableVals") {
values("0 12 22 33 44 49 56 57 58 59") ;
}
incomeFalling("TableVals") {
values("0 41 32 21 21 19 18 17 16 15") ;
}
}
intrinsicVal() {
risingVals {
values("0 0.1 0.331 0.34 0.6 0.9 0.11 0.123 0.14 0.125") ;
}
fallingVals {
values("0.55 0.10 0.09 0.08 0.08 0.078 0.75 0.6 0.5 0.4") ;
}
}
} // End stand alone child
} // End city data
1 ответ
Если это задача, которую вы можете выполнять повторно, я бы подумал написать простой парсер для этого мини-языка. Кажется, не очень сложно даже с нуля, https://metacpan.org/pod/Parse::RecDescent может быть полезным (если не чрезмерным).
Если бы я спешил, пришлось бы обрабатывать такой файл один раз, и этот файл был бы ниже 100 МБ, я бы.... открыл копию этого файла в emacs и сделал бы несколько замен регулярных выражений, чтобы он сам исправлял perl (или, если файл очень большой, написал короткий скрипт, чтобы эти регулярные выражения заменяли). Это не так далеко, как:
city => {
area => "50 sq miles",
marriedCouples => { # this begins one married couple data
children => 2,
#...
values => qw(0 0.1 0.331 0.34 0.6 0.9 0.11 0.123 0.14 0.125),
},
это правильный perl, поэтому изменения как
- своп:(что угодно); с => "(что-нибудь)",
- добавить после каждого}
- сделать QW из ("...")
будет близко...