Editando gcode com vim regex

1

Eu preciso editar o gcode para um modelo em particular Eu tenho que subtrair o número 87 de todas as coordenadas Z. Aqui está uma amostra do gcode:

;LAYER:435
G0 F9000 X-38.420 Y-26.887 Z87.300
;TYPE:WALL-INNER
G1 F1800 X-37.709 Y-27.459 E1386.91774
G1 X-37.020 Y-28.062 E1386.94819
G1 X-36.404 Y-28.635 E1386.97618

Do exemplo anterior há Z87.300, que eu preciso mudar para Z0.300 e fazer isso para Z inteiro. Eu tentei seguir o comando no vim:

:%s/Z\(\d\d\)/\="Z".submatch(1)-87/

Mas isso é errado.

    
por alevins 12.12.2014 / 18:10

1 resposta

1

O Vim avalia sua expressão da esquerda para a direita, então ela primeiro concatena "Z" e a correspondência e, a seguir, subtrai 87 da string (que produz 0). Isso pode ser corrigido com parênteses:

:%s/Z\(\d\d\)/\="Z".(submatch(1)-87)/

Para ser mais explícito (e lidar com números decimais que começam com 0 ), você pode lançar str2nr() , assim:

:%s/Z\(\d\d\)/\="Z".(str2nr(submatch(1))-87)/
    
por 12.12.2014 / 20:54

Tags