Free Trial

Fórum

SOLUCIONADO

Multi-Row Formula

Andymesmo
Asteroide

Olá pessoal!

 

Preciso de uma ajuda com o uso da ferramenta "multi-row formula" sem usar o delimitador para dividir pois o arquivo tem diferentes estruturas. 

 

Necessito alterar sempre a linha seguinte do arquivo quando encontrar o seguinte parâmetro:

 

Se |A100| e conter |908| então alerar a linha de baixo se for |A170| ,modificando os últimos caracteres

 

Regra: substituir de |52300|| para |42630||

 

 

Abaixo, um trecho do código que já tentei e não consegui (lembrando que no uso da tool não estou criando um new field e sim mantendo a configuração como "Update Existing Field")

 

[Usando a tool Multi-Row Formula]

IF Left([Field_1], 6) = "|A100|" AND Contains([Field_1], "|908|")
AND [Row+1:Field_1] = "|A170|" AND (Right([Field_1], 8)= "|52300||")
THEN Replace([Field_1], "|52300||", "|42630||")
ELSE [Field_1]
ENDIF

 

 

OBS: em uma das outras tentativas que fiz com uso da tool Multi-Row Formula (usando outra tentativa de código), no arquivo original houve divergência no tamanho do arquivo em relação ao original após salvar, notando o aumento de alguns kbs.

=====================

Se possuir também um método para usar a tool "fórmula", aceito a dica bem como também alguma outra tool ou linha de código. 

 

Obrigado. 

 

 

Segue em anexo um pequeno Sample

 

 

 

 

5 RESPOSTAS 5
carlosteixeira
15 - Aurora
15 - Aurora

Boa tarde @Andymesmo 

 

Testa essa aqui:

 

IF ((Left([Row-1:Field_1], 6) = "|A100|" AND Contains([Row-1:Field_1], "|908|")) and (contains([Field_1],"|A170|") AND (Contains([Field_1],"|52300||"))))
THEN Replace([Field_1], "|52300||", "|42630||")
ELSE [Field_1] ENDIF

 

Acho que deu certo

carlosteixeira_0-1651003256757.png

 

Abraços

Carlos A Teixeira
Andymesmo
Asteroide

@carlosteixeira 

Muito obrigado pela instrução que tem passado. 

Vi que eu estava usando a sintaxe de uma outra forma e que do modo o qual sugeriu deu tudo certo como esperado. 

 

Poderia por favor só esclarecer por que inicia com Left([Row-1:Field_1], 6) = "|A100|"  e não com Left([Field_1], 6) = "|A100|"  ?

 

Obrigado.

carlosteixeira
15 - Aurora
15 - Aurora

Fala @Andymesmo tudo bem? Por nada.

 

Cara na verdade, quando estava olhando sua fórmula apenas resolvi inverte a lógica de olhar a linha de baixo primeiro (Row+1) e olhar a de cima (Row-1), como os dados começam sempre com uma linha nula, pois a anterior a primeira é nula, eu resolvi testar a lógica assim e funcionou. Só tentei pensar um pouco diferente.

 

Abraços

Carlos A Teixeira
Andymesmo
Asteroide

Perfeito @carlosteixeira 

 

Eu insisti de outras formas mas sempre colocar o row+1 primeiro. 

Que bom deu certo ao inverter para ler o row-1 primeiro hahaa.....

 

Agradeço novamente. 

carlosteixeira
15 - Aurora
15 - Aurora

@Andymesmo Não por isso.

Nossa missão aqui é ajudar.

 

Abraços

 

Carlos A Teixeira
Rótulos