2017-10-28 27 views
1

私はtxtファイルからデータを読み出すのに助けが必要です。私は、行が 'project'セクションの内側にあるかどうかを示したい。もしそうなら、com.google.maps.api:1.9.10を探してください。私はそれがprojectセクションにあるかどうか情報を得るべきです。 私はこのような状況についてどのように考えるべきか考えていないので、ここではソースコードを提供しません。多分あなたはこれを解決する方法を考えているかもしれません。groovyファイルからデータを読み取る

サンプル入力:ファイルからのサンプルデータの下

:ここ

+--- project :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:1.9.10 
| +--- other data 
+--- something :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:2.2.2 
| +--- other data 
+0

これは、コーディングに関する通常の要件を満たしていないため、おそらく保留になります。しかし、あなたがしたいことを英語で書いてみるべきです。これをあなたの計画として使用して、問題を細分化してください。 1つのヒント:どのようにセクションを区切りますか?どのように行がセクションヘッダか何らかの種類のデータであることをどのように知っていますか?読むときに順序が重要ですか?また、このデータをJSONなどの中間的な形式に変換することもできます。ここでは誰もあなたのためにこのコードを設計したり書くつもりはないことに注意してください。 – jdv

答えて

1

最初のアイデアは、あなたが適切なセクションにいるならば、チェック改行文字(\n)に分割さの線をループにあります後続の行に必要な値が含まれているかどうかを確認します。そうであれば、それは見つかった、そうでなければそれはない。

第2のアイデアは、よりデータ指向のアプローチを使用することです。正規表現を使用してデータをセクションに分割し、それらをタプルに変換し、適切な名前を持つタプルを探します。タプルは、その値に必要な値を持ちます。ここで、+---が区切り文字であるとのことでラインが開始されます - 適切な正規表現と

def input = ''' 
+--- project :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:1.9.10 
| +--- other data 
+--- something :google-json 
| +--- other data 
| +--- other data 
| +--- com.google.maps.api:2.2.2 
| +--- other data 
''' 
input 
    .split(/(?ms)(^\+---)/) 
    .toList() 
    .findAll { !it.trim().isEmpty() } 
    .collect { 
     def section = it.substring(0,it.indexOf('\n')) 
     new Tuple(
      section, 
      (it - section) 
      .trim() 
      .split('\n') 
      .collect { (it - '| +---').trim() } 
     ) 
    } 
    .find { 
     it.get(0) == 'project :google-json' && it.get(1).find { 'com.google.maps.api:1.9.10'.equals(it) } 
    } 
  1. スプリットラインは:ここでは、それがどのようになるのです。
  2. splitは配列を返しますので、intリストを返します。
  3. 空の要素をすべて削除します。
  4. データをタプルに変換します。最初の値はセクション名(例:project :google-json)で、2番目の値はASCIIアートツリー要素が削除された依存関係のリストです。
  5. 目的のタプルを探します。
関連する問題