Как сравнить 2 файла CSV только с первыми 6 знаками в groovy - PullRequest
0 голосов
/ 04 августа 2020

Помогите разобрать CSV до JSON из 2 файлов в groovy. У меня такой 1-й CSV (номера строк каждый раз могут быть разными):

testKey, status

Name001-something, PASS

Name002-something, PASS

Name003-something, FAIL

CSV2 (список всех тестовых ключей, но с разными именами ключей:

Kt, Pd

PT-01, Name007-something1

PT-02, Name001-something2

PT-03, Name003-something3

PT-05, Name002-something5

PT-06, Name004- something5

PT-07, Name006-something5

Этот код анализирует только одно и то же значение, но мне также нужен testKey, даже если первые 7 знаков одинаковы в обоих файлах. Возможно, substring (0, 6)?

import groovy.json.*    

def csv1 = '''
testKey,status
Name001-something,PASS
Name002-something,PASS
Name003-something,FAIL
Name004-something,FAIL
'''.trim()

def csv2 = '''
Kt,Pd
PT-01,Name007-something1
PT-02,Name001-something2
PT-03,Name003-something3
PT-05,Name002-something4
PT-06,Name004-something5
PT-07,Name006-something6
'''.trim()

boolean skip1st = false

def testMap2 = [:]
//parse and bind 1st CSV to Map
csv2.splitEachLine( /\s*,\s*/ ){
  skip1st ? ( testMap2[ it[ 1 ] ] = it[ 0 ] ) : ( skip1st = true )
}

def keys
def testList = []
csv1.splitEachLine( /\s*,\s*/ ){ parts ->
  if( !keys )
    keys = parts*.trim()
  else{
    def test = [:]
    parts.eachWithIndex{ val, ix -> test[ keys[ ix ] ] = val }
    //check if testKey present in csv2
    if( testMap2[ test.testKey ] ){
      test.testKey = testMap2[ test.testKey ] // replace values from CSV2
      testList << test
    }
  }
}  

def builder = new JsonBuilder()
def root = builder {
    testExecutionKey 'DEMO-303'
    info user: 'admin'
    tests testList
 }

builder.toPrettyString()

результат:

{
    "testExecutionKey": "DEMO-303",
    "info": {
        "user": "admin"
    },
    "tests": [
        
    ]
}

В результате мне нужно что-то вроде:

{
    "testExecutionKey": "DEMO-303",
    "info": {
        "user": "admin"
    },
    "tests": [
        {
            "testKey": "PT-02",
            "status": "PASS"
        },
        {
            "testKey": "PT-05",
            "status": "PASS"
        },
        {
            "testKey": "PT-03",
            "status": "FAIL"
        },
        {
            "testKey": "PT-06",
            "status": "FAIL"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...