Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido)Filtrar Conteudo em Texto
Fórum Script Brasil > Programação & Desenvolvimento > .NET
travesso
Olá Pessoal da SB Venho aqui tirar uma pequena Duvida...

Será que é possível encontrar um Código BASE64 dentro de um Arquivo de TEXTO ?

Melhor Explicando, tenho um arquivo de texto onde nele existe algumas linhas codificadas em base 64 queria(se for possível), montar uma função que encontre essa linha e salve em uma array para se usada Depois em outra função e caso fosse encontrada mais de uma linha codificada seria posta em outra array

Caso for Possível Gostaria de Indicações de Como Realizar Tal Façanha Obg a todos, no aguardo de Resposta !
Xistyle
Mas o seu arquivo texto tem outras informações? Tipo um texto normal e no meio do texto o código em base 64?
travesso
QUOTE(Xistyle @ 25/10/2011 - 17:05) *
Mas o seu arquivo texto tem outras informações? Tipo um texto normal e no meio do texto o código em base 64?


Sim Ele tem varios textos normais e em meio a tanto texto tem um codigos base64
Xistyle
Não entendi a necessidade de manter um texto codificado no meio de um texto normal. O problema nessa situação é que você não tem um padrão de dados. Sua informação pode ser qualquer texto (em base64).
Isso dificulta, pois você teria que ler todas as palavras e tentar decodificá-las.
travesso
QUOTE(Xistyle @ 26/10/2011 - 10:48) *
Não entendi a necessidade de manter um texto codificado no meio de um texto normal. O problema nessa situação é que você não tem um padrão de dados. Sua informação pode ser qualquer texto (em base64).
Isso dificulta, pois você teria que ler todas as palavras e tentar decodificá-las.


Bom o codigo base64 sempre estará na 6º linha do arquivo de texto.
Talvez sabendo onde ele estará fica mais facil encontra-lo!
Xistyle
Legal! Isso já estabele um padrão! Sendo assim, você pode percorrer seu arquivo até a 6ª linha e aplicar a decodificação em Base64 para esta linha. Segue algum código:

CODE
public static string Encode(string texto)
{

    byte[] vetorBytes = System.Text.Encoding.Unicode.GetBytes(texto);

    string resultado = System.Convert.ToBase64String(vetorBytes);

    return resultado;

}

public static string Decode(string texto)
{

    byte[] vetorBytes = System.Convert.FromBase64String(texto);

    string resultado = System.Text.Encoding.Unicode.GetString(vetorBytes);

    return resultado;

}
travesso
QUOTE(Xistyle @ 26/10/2011 - 11:09) *
Legal! Isso já estabele um padrão! Sendo assim, você pode percorrer seu arquivo até a 6ª linha e aplicar a decodificação em Base64 para esta linha. Segue algum código:

CODE
public static string Encode(string texto)
{

    byte[] vetorBytes = System.Text.Encoding.Unicode.GetBytes(texto);

    string resultado = System.Convert.ToBase64String(vetorBytes);

    return resultado;

}

public static string Decode(string texto)
{

    byte[] vetorBytes = System.Convert.FromBase64String(texto);

    string resultado = System.Text.Encoding.Unicode.GetString(vetorBytes);

    return resultado;

}


Pois é SO que nessa linha tambem tem algumas palavra então ele retorna um error dizendo:
"Caractere inválido em uma seqüência Base-64."
Xistyle
Cara você pode tentar trabalhar tratando essa exceção. Tipo, se der esse erro, pular pra próxima palavra.
Dê uma olhada também nesse link:
http://stackoverflow.com/questions/3857999...ng-inside-of-it
travesso
QUOTE(Xistyle @ 26/10/2011 - 15:10) *
Cara você pode tentar trabalhar tratando essa exceção. Tipo, se der esse erro, pular pra próxima palavra.
Dê uma olhada também nesse link:
http://stackoverflow.com/questions/3857999...ng-inside-of-it


Vlw pela Resposta mas Tipo eu Estou Usando VB.net e esse Codigo e para C# tentei converter mas o codigo não funciona . Segue Abaixo o Codigo Convertido:

CODE
' non-base64 ASCII chars
        Dim delimiters = New Char() {}
        Dim possibles = TextBox2.Text.Split(delimiters, StringSplitOptions.RemoveEmptyEntries)
        'need to tweak to include padding chars in matches, but still split on padding?
        'maybe better off creating a regex to match base64 + padding
        'and using Regex.Split?

        For Each match As Var In possibles
            Try
                Dim converted = Convert.FromBase64String(match)
                Dim text = System.Text.Encoding.UTF8.GetString(converted)
                If Not String.IsNullOrEmpty(text) Then
                    value = value.Replace(match, text)
                End If
                'handle it
            Catch generatedExceptionName As System.ArgumentNullException
                'handle it
            Catch generatedExceptionName As System.FormatException
            End Try
        Next


Retorna o Seguinte Error : "Type 'Var' is not defined"
Xistyle
Tente
"For Each match As Object In possibles"

Mas lembre-se de adaptar o código (campos, variáveis, lógica) de acordo com o seu programa. Ctrl + C, Ctrl + V não dá muito certo.
travesso
QUOTE(Xistyle @ 27/10/2011 - 09:30) *
Tente
"For Each match As Object In possibles"

Mas lembre-se de adaptar o código (campos, variáveis, lógica) de acordo com o seu programa. Ctrl + C, Ctrl + V não dá muito certo.


Vlw pela Dica Funcionou Perfeitamente !

Mas enquanto eu Esperava sua resposta acabei por fazer meu projeto de uma outra maneira.

eu estava pegando o source de uma pagina da web onde eu so queria a parte que estava em base 64. então peguei na net um codigo para baixar o source da pagina e salvar em um txt:
CODE
Try
            ' inicia o leitor da stream para a pagina atual
            Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create(urll)
            Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()
            Dim recvStream As Stream = myHttpWebResponse.GetResponseStream()

            ' le o stream no formato "utf-8"
            Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
            Dim readStream As New StreamReader(recvStream, encode)
            Dim sPagina As String
            While (readStream.Peek() > -1)
                sPagina += readStream.ReadLine() + vbCrLf
            End While
            Dim f As New IO.StreamWriter("c:\arquivo.txt")
            f.Write(sPagina)
            f.Close()
        Catch ex As Exception
            Beep()
        End Try


Apos da uma analisada nesse código percebi que todas as palavras no código estava dentro de Aspas Duplas... Então Pensei "Opa vou usar isso como um delimitador" e foi isso que fiz peguei um código para ler arquivos de txt com limitadores e coloquei tudo em um ComboBox, então só foi ir até o index onde estava o código que eu queria e pimba mandava decodificar !

Vou Por Abaixo Todo o Código do Meu Projeto para Quem Tiver uma Duvida Parecida:
CODE
Imports System.IO
Imports System.Net
Imports System.Text

Public Class Form1
'função para ler o arquivo de texto com delimitador
    Public Shared Function lerArquivo(ByVal arquivo As String, ByVal delimitador As String)
        Try
            Return Split(System.IO.File.OpenText(arquivo).ReadToEnd(), delimitador)
        Catch e As FileNotFoundException
            MessageBox.Show("Arquivo não Localizado")
        End Try
    End Function
    
    Function GerarTXT(ByVal urll As String)
       'função para baixar o código fonte para um txt. usar com o camando GerarTXT("URL a ser baixada")
       'Obs ele não cria nem verifica se o arquivo existe por isso o arquivo deve ser existente Não adaptei para isso :D
Try
            ' inicia o leitor da stream para a pagina atual
            Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create(urll)
            Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()
            Dim recvStream As Stream = myHttpWebResponse.GetResponseStream()

            ' le o stream no formato "utf-8"
            Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
            Dim readStream As New StreamReader(recvStream, encode)
            Dim sPagina As String
            While (readStream.Peek() > -1)
                sPagina += readStream.ReadLine() + vbCrLf
            End While
            Dim f As New IO.StreamWriter("c:\arquivo.txt")
            f.Write(sPagina)
            f.Close()
        Catch ex As Exception
            Beep()
        End Try
        'Usa a função de ler o arquivo para preencher o ComboBox
        ComboBox1.DataSource = lerArquivo("c:\arquivo.txt", """")
        ' Define o index 429 com o index a ser visto de primeira no meu caso esse é o index do base64
        ComboBox1.SelectedIndex = 429
    End Function
End Class


Bom mas de qualquer maneira sua ajuda foi muito Util e tenho certeza que usarei ela em meus projetos Futuros
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.