Precisa de ajuda para substituir uma tag por outra

1

Alguém pode me ajudar no EmEditor Macro?

id="131"
        restype="x-p"
        phase-name="pretrans"><source>Good morning</source><seg-source><mrk
            mtype="seg"
            mid="1">Good morning</mrk></seg-source><target><mrk
            mtype="seg"
            mid="1"
            MadCap:segmentStatus="Untranslated"
            MadCap:matchPercent="0" /></target></trans-unit>

Deverá se tornar

id="131"
        restype="x-p"
        phase-name="pretrans"><source>Good morning</source><seg-source><mrk
            mtype="seg"
            mid="1">Good morning</mrk></seg-source><target><mrk
            mtype="seg"
            mid="1"
            MadCap:segmentStatus="Untranslated"
            MadCap:matchPercent="0" />Good morning</target>"> </trans-unit>

Tenho 5000 arquivos e preciso executar essa macro no Batch, então, se alguém puder me ajudar a fazer isso?

Eu quero o código para o processo de loop no arquivo em lote, o texto de origem pode ser qualquer coisa.

    
por Sandy 17.07.2014 / 11:15

1 resposta

0

Quando você trabalha com muitos arquivos, pode prestar muita atenção. No número reside o caos.

Neste momento, não posso ajudá-lo com Visual Basic ou EmEditor Macro , mas posso dar uma alternativa.

Você pode instalar algum ambiente linux como como CygWin, UnxUtils ..., ver link e possibilidade em , ou você pode tentar traduzir o que ele segue no Visual Basic.

Marcos:

  • Personalizar uma chave exclusiva. No seu caso deve ser a linha que contém MadCap:matchPercent="0"
  • Verifique se, com sua seleção, você não terá outras linhas não desejadas .
    Sob o linux você pode fazer:

    grep -e 'MadCap:matchPercent="0"' AllMyFiles           
        # It gives a lot of lines maybe more that the number of files
    grep -e 'MadCap:matchPercent="0"' AllMyFiles | sort -u 
        # sort -u unique ... if you are lucky it's only one. 
    

    Você pode usar uma chave mais restrita como

    grep -e 'MadCap:matchPercent="0" /></target></trans-unit>' AllMyFiles 
    
  • Agora você pode começar a trabalhar em um único arquivo, por exemplo, substituindo a linha MadCap:matchPercent="0" /></target></trans-unit> pela sua string.
    Eu escrevo um pequeno roteiro mesmo porque é mais fácil de ler. Vamos chamá-lo de Change_One.sh e invocá-lo com /bin/bash Change_One.sh Myfile.txt . Experimente antes em um arquivo copiado:

    #!/bin/bash
    C="Good morning"                    # This is what you want to add
    A='MadCap:matchPercent="0" \/><\/target><\/trans-unit>'
    B='MadCap:matchPercent="0" \/>'${C}'<\/target>\"> <\/trans-unit>'
    sed  -i -e "s/${A}/${B}/g" $1       # Here you do it 
    
  • Quando estiver tudo bem, você pode continuar e repetir em todos os arquivos

    #!/bin/bash 
    searchFiles='*.txt'                 # Here the 5000 files  
    C="Good morning"                    # This is what you want to add
                                        # $AA the not escaped string
                                        # $A and $B the escaped strings
    
    AA='MadCap:matchPercent="0" /></target></trans-unit>'
    A='MadCap:matchPercent="0" \/><\/target><\/trans-unit>'
    B='MadCap:matchPercent="0" \/>'${C}'<\/target>\"> <\/trans-unit>'
    
    for i in 'grep -l -E "$AA"  $searchFiles'; do
      # echo "# Working on file " $i    # uncomment this line to test iterations
      sed -i -e "s/${A}/${B}/g" "$i"    # comment this line to test iterations
    done
    

    Nota: com grep você pode pesquisar a string dentro dos arquivos, com -l você imprime apenas o nome do arquivo, com 'command' você executa o comando dentro do script e sua saída (os nomes de arquivos correspondentes) é usada pelo ciclo for ... do done .

por 17.07.2014 / 15:59