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

Retirar apenas os emails de um txt automaticamente

Discussão em 'Programação' iniciada por rikysa, 17 de Dezembro de 2008. (Respostas: 13; Visualizações: 1246)

  1. rikysa

    rikysa Power Member

    Alguém sabe como se faz. Isto deve ser muito básico mas não consigo raciocinar como fazer.
    Tem um txt em que cada linha tem desta forma: nome email hash ip
    O que devo usar para de forma automática retirar os emails apenas do txt file?
     
  2. ribeiro55

    ribeiro55 Power Member

    Depende do sítio onde os queres empregar, dos OS que operas e da preferência pessoal por uma ou outra runtime. Podes especificar? É mais fácil atacar logo no ponto.
     
  3. rikysa

    rikysa Power Member

    Eu quero os por tipo numa lista para depois poder enviar um mail para todos usando o outlook por exemplo. OS: windows

    Obrigado.
     
  4. ribeiro55

    ribeiro55 Power Member

    Podes postar aqui uma linha do dito txt (não mostrando obviamente os emails e nomes correctos) ?

    Apenas para determinar as passagens necessárias.
     
  5. ribeiro55

    ribeiro55 Power Member

    Lol, não. Diz-me só uma coisa: O nome tem espaços, ou pode ter espaços ?
     
  6. OubeLa

    OubeLa Power Member

    Em que linguagem queres fazer isso? A maneira mais facil é retirar o email, enviar para uma string. Separar os emails por virgulas e depois enviar tudo para outro txt. Depois era só fazer copy-paste dessa linha que já vinha toda formatada.
     
  7. rikysa

    rikysa Power Member

    Nao os nomes nunca tem espaços.

    Cumprimentos.

    talvez php sir_atmc .
     
  8. ribeiro55

    ribeiro55 Power Member

    Estava a tentar fazer-te isso em VBScript para ser o mais independente possível, mas tenho de ir dormir pah. Faço-te em VB em 3 minutos.
    Já faço edit aqui com o link para o file.
    Não tenho VB6 aqui, precisas da framework 2, mas também quem não tem a framework 2 e trabalha com Windows, já a devia ter. :001:
     
  9. rikysa

    rikysa Power Member

    Ok sem pressa e obrigado pela ajuda. ;) Depois de ver para a proxima talvez consiga ajudar alguem com uma duvida parecida xD
    Eu tenho framework 3.5 instalado por causa do visual studio.

    cumprimentos
     
  10. ribeiro55

    ribeiro55 Power Member

    Ah tens visual studio. Melhor ainda.
    Abre um projecto de Visual Basic, e espeta para lá isto, mesmo no form_load:
    (ou posso enviar-te o executável, como preferires)
    (assim é melhor, com o código aprende-se)

    Código:
            Me.Visible = False
            Dim OFD As New OpenFileDialog
            Dim SFD As New SaveFileDialog
    
            SFD.Filter = "Ficheiro de texto|*.txt"
            OFD.Filter = "Ficheiro de texto|*.txt"
            OFD.Title = "Ficheiro para LER"
            SFD.Title = "Ficheiro onde ESCREVER"
            OFD.ShowDialog()
            SFD.ShowDialog()
    
            If OFD.FileName = Nothing Then End
            If SFD.FileName = Nothing Then End
    
            Dim SR As New IO.StreamReader(OFD.FileName, True)
            Dim SW As New IO.StreamWriter(SFD.FileName, False)
    
            Try
                While Not SR.EndOfStream
                    Dim AEscrever As String = Nothing
                    Dim Partes() As String = Split(SR.ReadLine, " ")
    
                    If Not Partes(1).Contains("@") Then
                        AEscrever = "Linha com email em posição errada ou email inválido"
                    Else
                        AEscrever = Partes(1)
                    End If
    
                    SW.WriteLine(AEscrever)
                End While
    
                SR.Close()
                SW.Close()
                End
    
            Catch excep As Exception
                MsgBox("Erro de I/O" & vbCrLf & excep.Message)
                SR.Close()
                SW.Close()
                End
    
            End Try
    Se for para uma linha com os emails separados por vírgulas como o sir_atmc sugeriu, bastam umas alterações subtis. Vê-lá como queres.
     
    Última edição: 17 de Dezembro de 2008
  11. rikysa

    rikysa Power Member

    Muito obrigado pelo codigo xD vou olhar para ele e tentar aprender. sim e melhor do que em exe.
    Bem agora vou dormir depois digo se correu as mil maravilhas ou não.
    Ate amanha fica bem
     
  12. [C4]

    [C4] Power Member

    Deixo aqui um exemplo de um prog que fiz para procurar email num texto, seja ele qual for, esteja o email em que posicao estiver.

    Condições:
    textBox1.Text -> caxa de texto onde procurar pelos emails.... pode ser uma variavel com o conteudo do ficheiro.
    lstParsedEmails -> Listbox onde vou adicionando os email encontrados.

    Teste efectuado:
    Texto de input:
    [email protected]
    <1vvv>[email protected];[email protected] <2vvv>[email protected]
    <3vvv> [email protected] <4vvv> [email protected]
    "5vvv" [email protected]
    6vvv [email protected]
    asdasdas
    dasdsa [email protected]
    das

    output:
    [email protected]
    <1vvv>[email protected]
    [email protected]
    <2vvv>[email protected]
    <3vvv> [email protected]
    <4vvv> [email protected]
    "5vvv" [email protected]
    [email protected]
    [email protected]

    Nota:
    o formato 6vvv [email protected] nao aparece, e penso que é este que vais querer usar. É uma questão alterares a RegExp. Exitem bons sites onde podes ir construindo e validando a regexp que estar a usar.

    Código:
     
    [SIZE=2][COLOR=#2b91af][COLOR=white]Regex[/COLOR][/COLOR][/SIZE][COLOR=white][SIZE=2] emailregex = [/SIZE][SIZE=2]new[/SIZE][SIZE=2]Regex[/SIZE][SIZE=2]([/SIZE][SIZE=2]"(((\"[\\w\\.\\-]+\")|(\\<[\\w\\.\\-]+\\>))(\\s*))*([\\w\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)"[/SIZE][SIZE=2]);[/SIZE][/COLOR]
     
    privatevoid btnParse_Click(object sender, EventArgs e)
    { 
        lstParsedEmails.Items.Clear();
     
        MatchCollection col = emailregex.Matches(textBox1.Text);
        foreach (object email in col)
        {
            if(!lstParsedEmails.Items.Contains(email.ToString()))
                lstParsedEmails.Items.Add(email.ToString());
        }
    }
     
     
    
     
  13. spastikman

    spastikman Banido

    Se tiveres acesso a uma consola linux :


    cat ficheiro_com_esses_dados | awk '{print $2;}'


    então

    cat ficheiro_com_esses_dados | cut -d' ' -f1
     

Partilhar esta Página