+ Responder ao Tópico



  1. #1
    guppista
    Visitante

    Padrão Editor vi. Problemas para substituir o caracter "ponto"

    Olá Pessoal.

    O problema é o seguinte:

    Tenho uma série de arquivos de dados em números que preciso tratar. Muitos desses dados estão sem o 0. do número decimal(. ao invés de , pois o tratamento é com software estrangeiro). Por exemplo:
    Ao invés de 0.XXX está apenas .XXX

    Eu tentei resolver o problema dando o comando : s/ ./0./g ,porém,
    acho que o vi entende o . como primeiro caracter e acaba criando em todo primeiro caracter de uma palavra o 0.
    Não descobri uma maneira mais inteligente de fazer essa operação portanto, se alguém puder, por favor me fale como, OK?

    Valeu desde já!

  2. #2

    Padrão Re: Editor vi. Problemas para substituir o caracter "ponto"

    Olá, amigo

    Esse comportamento acontece porque a string a ser substituida é interpretada como uma expressão regular. Dessa maneira, o . (ponto) é um caracter especial e precisa ser precedido por \ (barra invertida) pra poder ser interpretado como apenas um caracter normal.

    No seu caso vai depender em que posição na linha está número onde falta o zero. Se ele estiver no começo da linha, pode usar o seguinte:

    Código :
    :g/^\./s//0\./g

    Pra substituir valores que estejam precedidos por espaço:

    Código :
    :g/\ \./s//\ 0\./g

    Se puder, coloca aí uma amostra do arquivo pra facilitar.

    flw

  3. #3
    guppista
    Visitante

    Padrão Re: Editor vi. Problemas para substituir o caracter "ponto"

    Olá Lidzky,

    Muito obrigado pela informação. Consegui resolver o problema colocando a \ antes do ponto no comando.

    Ai está um exemplo de uma linha do arquivo antes:

    2002 39 30 1011 .35 33.62 27.37 13.2 27.01

    E a linha editada:

    2002 39 30 1011 0.35 33.62 27.37 13.2 27.01

    Só para matar uma possível curiosidade, esta linha faz parte de um arquivo de dados de uma estação meteorológica onde, em ordem crescente de colunas, temos: ano, dia, hora(de 30 em 30 minutos), pressão, intensidade do vento, direção do vento e dados de controle do equipamento que faz o registro.

    Obrigado mesmo.

    Citação Postado originalmente por lidzky
    Olá, amigo

    Esse comportamento acontece porque a string a ser substituida é interpretada como uma expressão regular. Dessa maneira, o . (ponto) é um caracter especial e precisa ser precedido por \ (barra invertida) pra poder ser interpretado como apenas um caracter normal.

    No seu caso vai depender em que posição na linha está número onde falta o zero. Se ele estiver no começo da linha, pode usar o seguinte:

    Código :
    :g/^\./s//0\./g

    Pra substituir valores que estejam precedidos por espaço:

    Código :
    :g/\ \./s//\ 0\./g

    Se puder, coloca aí uma amostra do arquivo pra facilitar.

    flw