Лучший способ обработки сложных вложенных данных с использованием 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 из ("...")

будет близко...

Другие вопросы по тегам