groovy从文件中读取数据

时间:2017-10-28 19:14:27

标签: java file groovy

我需要一些从txt文件中读取数据的帮助。我想表明行是否在内部' project'部分。如果是这样,请寻找com.google.maps.api:1.9.10。我应该获得有关它是否在project部分的信息。 我在这里没有提供任何源代码,因为我不知道如何考虑这种情况。也许你知道如何解决这个问题。

示例输入:

以下来自文件的示例数据:

+--- 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

1 个答案:

答案 0 :(得分:1)

这里的第一个想法是循环用新行字符(\n)拆分的行,然后检查你是否在适当的部分,然后验证任何后续行是否包含所需的值。如果是这样的话,那就找不到了。

第二个想法是使用更多面向数据的方法。使用正则表达式将数据拆分为多个部分,然后将它们转换为元组并查找具有适当名称的元组,该元组将具有其值的所需值。这是怎么回事:

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 list。
  3. 删除所有空元素。
  4. 将数据转换为元组。第一个值是节名称(例如project :google-json),第二个值是删除了ASCII艺术树元素的依赖项列表。
  5. 找到想要的元组。