¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como converter um arquivo CSV em um arquivo de texto de largura fixa em CPI Groovy - Guia passo a passo

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

Olá 7a519509aed84a2c9e6f627841825b5a , t.vanrooijen e especialistas,

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

Estou com um problema semelhante ao editar arquivos planos.

Preciso que a saída seja separada por vírgulas.

Isto é o que tenho agora:

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

E isto é o que preciso:

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

Este é meu input, (reduzido para caber aqui e executar mais 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

No script groovy, obtenho esses dados e são processados, os números 1, 2 e 3 são usados para diferenciar de onde os dados vêm.
Para cada registro, fiz isso:

	Job.each{ TODO O CÓDIGO
// Antes de anexar a variável textFinal contém meus dados 
                
                
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá sanjali07 Obrigado pelo seu código, está funcionando perfeitamente.

Tive outro erro, mas foi meu erro, já resolvi.

Você é incrível!

Saudações,

Alejandro

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

Olá Alex,

Obrigado por compartilhar o script completo.

Você pode tentar isso para todos os cenários possíveis e ver se funciona, em vez de dividir ainda mais o textFinal para o preenchimento que não acredito que você precise, de acordo com a sua saída esperada e dado que você está preparando todas as linhas com vírgulas, a próxima linha deve ser suficiente,

sb.append(textFinal+"\n")

Groovy atualizado anexado como arquivo de texto. processfile.txt

Cumprimentos

Sanjali

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

Olá 7a519509aed84a2c9e6f627841825b5a ,

Minha entrada é um grande conjunto de dados com 3 códigos, 1, 2 e 3.

Divido essa grande entrada em 3 tabelas, uma tabela por código.

Em seguida, para cada elemento no código 1, se disser SIM, adiciono esse registro à tabela de saída.
Se disser não, então tenho que procurar a chave na segunda tabela (código 2) se disser SIM, adiciono esse registro à tabela de saída.
Se disser Não, repito com a tabela 3. Se disser SIM, adiciono SIM. Se disser não, adiciono NÃO.

Tenho a saída pronta, com a exceção de que posso tê-la separada por vírgulas.
Por exemplo:

"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

Deveria produzir:

Código 1 = no, código 2 = no, código 3 = SIM ==> Saída SIM"50000124",KioskAccess,SIMCódigo 1 = SIM ==> Sem necessidade de verificar outros códigos.
"12701636",KioskAccess,SIMCódigo 1 = Não, código 2 = SIM ==> Sem necessidade de verificar código 3."11601173",KioskAccess,SIMSaída necessária em formato csv:"50000124",KioskAccess,SIM"12701636",KioskAccess,SIM"11601173",KioskAccess,SIM

Graças ao código que você forneceu como exemplo há algum tempo, consegui fazer isso:

"50000124"KioskAccess             No
"31010868"KioskAccess             No
"11601173"KioskAccess             No
Mas preciso disso separado por vírgulas.

Devido à minha experiência limitada com CPI e Groovy, este pode não ser a melhor abordagem, mas é o que consegui fazer, e agora, infelizmente, estou ficando sem tempo.

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

Olá Alejandro. Esqueça o código por agora. Em vez disso, por favor, explique detalhadamente como uma linha de entrada deve ser traduzida em uma linha de saída. Isso não está claro de modo algum em sua pergunta. Saudações, 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?