0


私はプログラミングに比較的慣れていません。以下のような夫婦に関するネストされたデータを含む巨大なファイルを処理する必要があります。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
4

1 に答える 1

0

これが繰り返し実行できるタスクである場合、このミニ言語用の単純なパーサーを作成することを検討します。ゼロからでも非常に難しいようには見えませ

急いでそのようなファイルを一度処理しなければならず、このファイルが 100MB 未満になる場合は、.... emacs でそのコピーを開き、いくつかの正規表現置換を作成して、perl 自体を正しいものにします (または、ファイルが非常に大きい場合、それらの正規表現を置き換える短いスクリプトを作成しました)。それはそう遠くない、sth のように:

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 を作る

近くに行きます...

于 2015-02-03T22:32:42.563 に答える