Cómo obtener valores específicos de 2 CSV en Groovy -- sv campo con groovy campo con soapui camp Relacionados El problema

How to get specific values from 2 CSV in groovy


0
vote

problema

Español

Ayuda con el parse CSV a JSON de 2 archivos en Groovy. Tengo 1er CSV como este (los números de línea pueden ser diferentes cada vez):

  testKey,status  Name001,PASS  Name002,PASS  Name003,FAIL   

CSV2 (Lista de todos los testkeys pero con diferentes nombres de claves:

  Kt,Pd  PT-01,Name007  PT-02,Name001  PT-03,Name003  PT-05,Name002  PT-06,Name004  PT-07,Name006   

Necesito coincidir con el resultado exactamente los mismos valores para TestKey (TestKey.CSV1 = KT = CSV2)

algo como esto:

  {     "testExecutionKey": "DEMO-303",     "info": {         "user": "admin"     },     "tests": [         {             "testKey": "PT-02",              "status": "PASS"         },         {             "testKey": "PT-05",              "status": "PASS"         },         {             "testKey": "PT-03",              "status": "FAIL"         }     ] }   

Este código está analizando solo el mismo valor, pero sin coincidir exactamente con la tecla de Test:

  <!DOCTYPE html> <html> <head>     <meta http-equiv="content-type" content="text/html; charset=utf-8" />     <script src="../background/jquery.js"></script> </head> <body>     <div class="title" id="main_title">         <p>EXTRACTIFY</p>     </div>     <button type="button" id="scrap_button">SCRAP</button>         <script src="functions/scrap.js"></script>     <script src="functions/main_panel.js"></script> </body> </html> 0  
Original en ingles

Please help with parse CSV to JSON from 2 files in groovy. I have 1st CSV like this (line numbers may be different each time):

testKey,status  Name001,PASS  Name002,PASS  Name003,FAIL 

CSV2 (list of all testkeys but with different names of keys:

Kt,Pd  PT-01,Name007  PT-02,Name001  PT-03,Name003  PT-05,Name002  PT-06,Name004  PT-07,Name006 

I need to match in result exactly the same values for testKey (testKey.CSV1=Kt=CSV2)

Something like this:

{     "testExecutionKey": "DEMO-303",     "info": {         "user": "admin"     },     "tests": [         {             "testKey": "PT-02",              "status": "PASS"         },         {             "testKey": "PT-05",              "status": "PASS"         },         {             "testKey": "PT-03",              "status": "FAIL"         }     ] } 

This code is parsing only the same value but with no matching exactly testKey:

File csv1 = new File( 'one.csv') File csv2 = new File( 'two.csv')  def lines1 = csv1.readLines() def lines2 = csv2.readLines()  assert lines1.size() <= lines2.size() fieldSep = /,[ ]*/  def fieldNames1 = lines1[0].split( fieldSep ) def fieldNames2 = lines1[0].split( fieldSep ) def testList = []  lines1[1..-1].eachWithIndex { csv1Line, lineNo ->   def mappedLine = [:]    def fieldsCsv1 = csv1Line.split( fieldSep )   fieldsCsv1[1..-1].eachWithIndex { value, fldNo ->      String name = fieldNames1[ fldNo + 1 ]     mappedLine[ name ] = value   }    def fieldsCsv2 = lines2[lineNo + 1].split( fieldSep )   fieldsCsv2[0..-2].eachWithIndex { value, fldNo ->      String name = fieldNames2[ fldNo ]     mappedLine[ name ] = value   }    testList << mappedLine } def builder = new JsonBuilder() def root = builder {   testExecutionKey 'DEMO-303'   info user: 'admin'   tests testList }  println builder.toPrettyString() 
        

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Necesita enlazar CSV2 a un mapa, y luego usarlo para reemplazar los valores de CSV1, como SO:

  import groovy.json.*      def csv1 = ''' testKey,status Name001,PASS Name002,PASS Name003,FAIL Name999,FAIL '''.trim()  def csv2 = ''' Kt,Pd PT-01,Name007 PT-02,Name001 PT-03,Name003 PT-05,Name002 PT-06,Name004 PT-07,Name006 '''.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()   

da:

  my @sorted_indexes = sort { $unsorted[$b] <=> $unsorted[$a] } 0..$#unsorted; 0  
 

You need to bind CSV2 to a Map, and then use it to replace values from CSV1, like so:

import groovy.json.*      def csv1 = ''' testKey,status Name001,PASS Name002,PASS Name003,FAIL Name999,FAIL '''.trim()  def csv2 = ''' Kt,Pd PT-01,Name007 PT-02,Name001 PT-03,Name003 PT-05,Name002 PT-06,Name004 PT-07,Name006 '''.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() 

gives:

{     "testExecutionKey": "DEMO-303",     "info": {         "user": "admin"     },     "tests": [         {             "testKey": "PT-02",             "status": "PASS"         },         {             "testKey": "PT-05",             "status": "PASS"         },         {             "testKey": "PT-03",             "status": "FAIL"         }     ] } 
 
 
 
 

Relacionados problema

1  ¿Qué falta en mi WSDL?  ( Whats missing in my wsdl ) 
Hola He creado un servicio web, y lo he estado probando con Soapui con éxito. Pero cada vez que trato de generar el cliente en el desarrollador de aplicacione...

-1  Problema en UE UE con SQL usando Script Groverty, el código de trabajo dejó de funcionar  ( Issue in soap ui with sql using grovvy script the working code stopped working ) 
Estoy golpeando la base de datos DB2 utilizando scripts Groverty en Soapui, el siguiente código estaba funcionando bien para mí durante algún tiempo. Sin emba...

2  Valor dinámico para un elemento utilizando la expansión de la propiedad  ( Dynamic value for an element using property expansion ) 
Referir la expansión de la propiedad de aquí Uno del elemento de la solicitud SOAP se define como sigue. <ns:PRODUCTID>${=def list = [12, 13,12];list.jo...

0  ¿Qué tan genedan los nodos XML con Groovy?  ( How iterate xml nodes with groovy ) 
Comenzó a trabajar con Soapui y no puede tomar idea de cómo tratar las respuestas de jabón con Groovy. Actualmente, mi proyecto abierto en NetBeans y después ...

0  ¿Cómo podemos establecer el valor al encabezado dinámicamente en Soapui?  ( How can we set the value to the header dynamically in soapui ) 
Soy nuevo en Soapui. Quería saber cómo podemos agregar 2 valor de propiedad en un valor de encabezado. Por ejemplo, obtuve alguna respuesta como en formato ...

3  ¿Cómo genero un siglo XMLValue?  ( How do i generate an xml signaturevalue ) 
Estoy intentando firmar una solicitud de jabón. El resto del documento es válido, pero el Valvo de Signature que termino no es lo que se espera. Aprendí jabón...

0  Error en la prueba de servicio web de UI de jabón  ( Error in testing webservice from soap ui ) 
Estoy probando una API de descanso en Postman y Soap Ui. La URL API DE REST es como https://endpointurl.com/resource Cuando estoy usando toda la URL y...

0  Solicitud de STS con autenticación de certificado en Soapui  ( Sts request with certificate authentication in soapui ) 
Tengo que hacer Solicitud de Solicitud con la firma de certificado y la marca de tiempo con Soapui para obtener un token de seguridad para usarlo en otras sol...

0  Quiere afirmar si el texto de cierto idioma ruso está presente en una respuesta de descanso en UE UI  ( Want to assert if certain russian language text is present in a rest response in ) 
El texto que quiero afirmar es "являются". Sin embargo, la afirmación Contains no funciona para este texto. ¿Alguien puede sugerir una forma diferente? Pa...

1  Escritura de Script Groovy para el servicio de descanso en Ui Ui  ( Writing groovy script for rest service in soap ui ) 
Estoy tratando de obtener la respuesta del servicio de descanso en un script Groovy de la siguiente manera: def groovyUtils = new com.eviware.soapui.suppor...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos