Avalados por :

Cómo convertir un archivo CSV a un archivo de texto de ancho fijo en CPI Groovy - Guía paso a paso

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 13 Vistas
0
Cargando...

Hola 7a519509aed84a2c9e6f627841825b5a , t.vanrooijen y expertos,

https://answers.sap.com/questions/569208/cpi-groovy-convert-csv-to-fixed-width-text-file.html?childT...

Tengo un problema similar editando archivos planos.

Necesito que la salida esté separada por comas.

Esto es lo que tengo ahora:

        "31008994"KioskAccess             No
          "31010868"KioskAccess             No
          "31010877"KioskAccess             No
          "31007038"KioskAccess             No
          "31009159"KioskAccess             No
          "31009182"KioskAccess             No

Y esto es lo que necesito:

"31008994",KioskAccess,No
"31010868",KioskAccess,No Override
"31010877",KioskAccess,No
"31007038",KioskAccess,Yes Override
"31009159",KioskAccess,No
"31009182",KioskAccess,Yes

Este es mi input, (reducido para que quepa aquí y se ejecute más rápido):

"31019260",1,OYES
"13014109",1,OYES
"31018709",1,OYES
"50000363",1,OYES
"50000124",1,OYES
"12701608",2,No
"12701636",2,Yes
"12701636",2,Yes
"12703144",2,No
"12703933",2,No
"11601173",2,No
"11601177",2,Yes
"11601184",2,Yes
"11601185",2,Yes
"31008994",3,No
"31010868",3,No
"31010877",3,No
"31007038",3,No
"31010890",3,No
"31004730",3,No
"31010945",3,No
"31004758",3,No
"31004774",3,No
"31004784",3,No
"31004880",3,No

En el script groovy obtengo estos datos y se procesan, los números 1, 2 y 3 se utilizan para diferenciar de dónde provienen los datos.
Para cada registro hice esto:

	Job.each{ TODO EL CÓDIGO
// Antes de adjuntar la variable textFinal tiene mis datos 
                
                
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola sanjali07 Gracias por tu código, está funcionando al 100%.

Tuve otro error pero fue mi error, ya lo resolví.

¡Eres genial!

Saludos,

Alejandro

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Alex,

Gracias por compartir el script completo.

¿Puedes probar esto para todos los escenarios posibles y ver si funciona, en lugar de dividir aún más el textFinal para el relleno que no creo que necesites según tu salida esperada y dado que estás preparando todas las líneas con comas, la siguiente línea debería ser suficiente,

sb.append(textFinal+"\n")

Groovy actualizado adjunto como archivo de texto. processfile.txt

Saludos cordiales

Sanjali

processfile.txt
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hi 7a519509aed84a2c9e6f627841825b5a ,

Mi entrada es un gran conjunto de datos con 3 códigos, 1, 2 y 3.

Divido esa gran entrada en 3 tablas, una tabla por código.

Luego, para cada elemento en el código 1, si dice Sí, añado ese registro a la tabla de salida.
Si dice no, entonces tengo que buscar la clave en la segunda tabla (código 2) si dice Sí, añado ese registro a la tabla de salida.
Si dice No, repito con la tabla 3. Si dice Sí, añado Sí. Si dice no, añado NO.

Tengo la salida lista, con la excepción de que puedo tenerla separada por comas.
Por ejemplo:

"50000124",1,No
"50000124",2,No
"50000124",3,Yes
"12701636",1,Yes
"12701636",2,No
"12701636",3,No
"11601173",1,No
"11601173",2,Yes
"11601173",3,Yes

Debería producir:

Código 1 = no, código 2 = no, código 3 =  ==> Salida "50000124",KioskAccess,SíCódigo 1 =  ==> No necesidad de verificar otros códigos.
"12701636",KioskAccess,SíCódigo 1 = No, código 2 = Sí ==> No necesidad de verificar código 3."11601173",KioskAccess,síSalida necesaria en formato csv:"50000124",KioskAccess,Sí"12701636",KioskAccess,Sí"11601173",KioskAccess,sí

Gracias al código que proporcionaste como ejemplo hace algún tiempo, logré hacer esto:

"50000124"KioskAccess             No
"31010868"KioskAccess             No
"11601173"KioskAccess             No
Pero necesito esto separado por comas.

Debido a mi experiencia limitada con CPI y Groovy, este puede que no sea el mejor enfoque, pero es lo que logré hacer, y ahora, desafortunadamente, me estoy quedando sin tiempo.

                 textFinal.splitEachLine(',') { fields -> 
                 fields.eachWithIndex() { field, index ->
                    sb.append(field.padLeft(columnWidths[index]))
                }
                sb.append
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Alejandro. Olvida el código por ahora. En su lugar, por favor explícame detalladamente cómo una línea de entrada debería ser traducida a una línea de salida. Esto no está claro en absoluto en tu pregunta. Saludos, Morten

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?