1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Extrair segmentos de texto de ficheiro txt

Discussão em 'Programação' iniciada por Cunha00, 11 de Julho de 2012. (Respostas: 4; Visualizações: 794)

  1. Cunha00

    Cunha00 Power Member

    Olá juventude,

    estou a postar isto aqui porque penso ser o sitio mais apropriado,

    o meu problema é o seguinte: tenho um ficheiro *.txt com vários contactos disposto desta forma:

    Nome bla bla 1
    Rua xpto1
    2540 -047 Cidade
    Tel.: 111111111 / Fax: 111111111
    Email: [email protected]
    Web: www.dddddd.pt


    Nome bla bla 2
    Rua do sitio
    7150 -249 Cidade
    Tel.: 22222222 / Fax: 222222222
    Email: [email protected]
    Web: www.site.com

    etc. isto com centenas deles.

    Eu queria saber se é possível fazer algum script ou macro ou magia negra de modo a obter uma lista só com o emails tipo:

    [email protected]
    [email protected]
    [email protected]
    ...

    basicamente é pegar em tudo que seja [espaço][email protected][espaço]

    Isto é possível? Com que linguagens ou ferramentas?
    Os meus conhecimentos em "programação" é só HTML e CSS e umas bases de javascript
     
  2. nfk

    nfk Power Member

    Se tiveres acesso a Linux ou outro sistema tipo Unix (por exemplo, Mac OS X), basta correr isto num terminal:

    Código:
    grep "Email: " ficheiro.txt |sed 's/Email: //'
    Também não deve ser difícil em Excel, usando a função IF para ficar só com as linhas que têm a string "Email: " e depois substituindo essa string por nada. (Claro que usando estes métodos também apanhas qualquer outra linha que tenha a string "Email: ", mas suponho que isso seja improvável. Podia-se procurar um padrão mais complexo que também validasse o próprio endereço de e-mail.)
     
  3. Sl0w

    Sl0w Power Member

    Com awk basta:

    Código:
    awk '/Email:/{print $2}' doc.txt
    
    Em python:
    Código:
    import re
    matches = re.finditer(r'Email:\s*([^\s]+)\s*', open('doc.txt').read())
    for g in matches:
      print(g.group(1))
    
    Em ruby:
    Código:
    File.open("doc.txt", 'r') do |f|
      f.read.scan(/Email:\s*([^\s]+)\s*/).each{|m| puts m}
    end
    
    Estas soluções assumem que os dados do ficheiro estão bem formados, isto é, o que vem a seguir ao Email é MESMO um email. Não faz qualquer validação do bom formato do mesmo.
     
    Última edição: 11 de Julho de 2012
  4. Cunha00

    Cunha00 Power Member

    Muito obrigado pelas respostas de ambos.

    Tentei a sugestão do nfk:
    Código:
    grep "Email: " ficheiro.txt |sed 's/Email: //'
    E funcionou às mil maravilhas.

    Quando tiver tempo vou brincar um pouco com todas essas opções de linguagens já que cada vez me começo a interessar mais pelo mundo da programação.
     
  5. nfk

    nfk Power Member

    Gostei da alternativa do sl0w, com o awk, porque usa só um programa. Em relação à minha, o grep encontra as linhas onde ocorre um determinado padrão e o sed substitui a parte que não queres ("Email:") por nada. Se queres começar a programar, python é uma boa linguagem. É simples e muito legível, mas também dá para fazer programas complexos. Há muitas outras linguagens boas para começar, apenas sugiro Python porque é a que uso mais.
     

Partilhar esta Página