Как преобразовать список вывода таблицы описаний или карту в groovy - PullRequest
0 голосов
/ 27 августа 2018

Как преобразовать приведенную ниже выходную карту или список в groovy

col_name,data_type,comment
"brand","string",""
"tactic_name","string",""
"tactic_id","string",""
"content_description","string",""
"id","bigint",""
"me","bigint",""
"npi","bigint",""
"fname","string",""
"lname","string",""
"addr1","string",""
"addr2","string",""
"city","string",""
"state","string",""
"zip","int",""
"event","string",""
"event_date","timestamp",""
"error_flag","string",""
"error_reason","string",""
"vendor","string",""
"year","int",""
"month","int",""
"",,
"# Partition Information",,
"# col_name            ","data_type           ","comment             "
"",,
"vendor","string",""
"year","int",""
"month","int",""**
  • Необходимо разделить раздел columns на отдельные map и normal столбцы в отдельных map.

Ожидаемый результат:

[[brand,string],[...]]

1 Ответ

0 голосов
/ 27 августа 2018

Попробуйте этот код:

CsvParser используется для чтения текста.Но ваш текст нуждается в некоторых изменениях перед его анализом.Итак, я сделал text processing для подгонки его в формат csv.

@Grab('com.xlson.groovycsv:groovycsv:0.2')
import com.xlson.groovycsv.CsvParser

def csv = '''col_name,data_type,comment
"brand","string",""
"tactic_name","string",""
"tactic_id","string",""
"content_description","string",""
"id","bigint",""
"me","bigint",""
"npi","bigint",""
"fname","string",""
"lname","string",""
"addr1","string",""
"addr2","string",""
"city","string",""
"state","string",""
"zip","int",""
"event","string",""
"event_date","timestamp",""
"error_flag","string",""
"error_reason","string",""
"vendor","string",""
"year","int",""
"month","int",""
"",,
"# Partition Information",,
"# col_name            ","data_type           ","comment             "
"",,
"vendor","string",""
"year","int",""
"month","int",""**'''


def maptxt = csv.split('"# Partition Information",,')

def map1txt = maptxt[0].trim()

def map2txt = maptxt[1].trim().readLines().collect{ 

        it=it.replace('#','')

        it=it.replaceAll("\\s", "")

}.join('\n')

println getAsMap(map1txt)

println getAsMap(map2txt)



Map getAsMap (def txt)

{
    Map ret = [:]

    def data = new CsvParser().parse(txt)

    for (each in data){

        if(each.col_name) // empty keys are neglected.

        ret[each.col_name]=each.data_type
    }

    ret

}

ваш текст пуст col_name.Этот код игнорировал эти строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...