Ir para conteúdo
Fórum Script Brasil
  • 0

Arquivos


Andersonjb

Pergunta

E ai pessoal, alguém poderia me ajudar com manipulação de arquivos? Bem, eu consigo ler os arquivos, so que não consigo ler eles por completo, so le a metade do arquivo e nunca le a primeira letra. Bem, meu codigo e esse:

Imports System.IO
Imports System.Windows.Forms
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Private arquivoentrada As FileStream
        Private binarioentrada As BinaryReader


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 

System.EventArgs) Handles Button1.Click
        Dim abrir As OpenFileDialog = New OpenFileDialog
        Dim resultado As DialogResult = abrir.ShowDialog
        Dim nomearq As String = abrir.FileName
        If resultado = DialogResult.Cancel Then
            Return
        End If
        arquivoentrada = New FileStream(nomearq, FileMode.Open, 

FileAccess.Read)
        binarioentrada = New BinaryReader(arquivoentrada)
        RichTextBox1.Text = binarioentrada.ReadString
    End Sub
End Class

alguém poderia me ajudar???

Link para o comentário
Compartilhar em outros sites

  • Respostas 102
  • Created
  • Última resposta

Top Posters For This Question

Posts Recomendados

  • 0

E ai Gray, conseguiu? Se precisar de ajuda, meu, eu ajudo, não tenho preguiça não, as vezes voce pensa que eu deixo voce desenvolver o codigo sozinho aqui e eu fico so esperando, hehe, se precisar de alguma ajuda ou alguma coisa e so falar...

Bem, eu queria tirar outra duvida? já ouviu falar em arquivos de 16 Bits? Existem arquivos que cada caracter valem dois pares de bytes, por exemplo, caracteres e seus endereços normais são assim:

17=á

18=â

19=ç

1A=è

1B=é

Agora, com 2 bytes( 16 bits), são assim:

8269=J

826A=K

826B=L

826C=M

826D=N

Viu como são dois pares de Hexas para apenas um caracter?

Bem, qual a diferença no processo pra mim abrir e salvar esse tipo de arquivo?

Link para o comentário
Compartilhar em outros sites

  • 0

E ai Gray, conseguiu? Se precisar de ajuda, meu, eu ajudo, não tenho preguiça não, as vezes voce pensa que eu deixo voce desenvolver o codigo sozinho aqui e eu fico so esperando, hehe, se precisar de alguma ajuda ou alguma coisa e so falar...

Honestamente eu ainda não tive tempo para voltar a tentar, mas prometo que não esquecerei (e seu eu esquecer, pode me lembrar! smile.gif).

Bem, eu queria tirar outra duvida? já ouviu falar em arquivos de 16 Bits? Existem arquivos que cada caracter valem dois pares de bytes, por exemplo, caracteres e seus endereços normais são assim:

17=á

18=â

19=ç

1A=è

1B=é

Agora, com 2 bytes( 16 bits), são assim:

8269=J

826A=K

826B=L

826C=M

826D=N

Viu como são dois pares de Hexas para apenas um caracter?

Bem, qual a diferença no processo pra mim abrir e salvar esse tipo de arquivo?

Arquivos UNICODE podem ser assim (UTF-8, UTF-16, UTF-32, etc.). A .NET Framework possui suporte total para lidar com estes tipos de arquivos (já que suas próprias strings são Unicode). No entanto, o ideal neste caso é abrir o arquivo como texto, para que as devidas conversões sejam feitas automaticamente. Seria extremamente trabalhoso você traduzir manualmente as sequências Unicode para uma codificação específica.

Se você abrir o Notepad e escrever o seguinte nele...

Li ŝatas drinkaĵon.

... e depois salvar o arquivo escolhendo a codificação "Unicode" ou "UTF-8" você verá que os caracteres serão formados por dois bytes (no caso do Unicode todos eles serão 2 bytes, já no caso do UTF-8 apenas os caracteres diferentes ["ŝ" e "ĵ"] é que terão 2 bytes). Mas, note que não é necessário nada de especial para ler estes arquivos:

        Dim f As New IO.StreamReader("c:\temp\teste.txt")
        MessageBox.Show(f.ReadToEnd())
        f.Close()

Certo? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

então, eu no caso e um arquivo binario que eu quero abrir, ele tambem abriria normalmente, sem precisar fazer modificações, conversões ou coisas do tipo?

E assim, sobre os padrões Unicode, por exemplo: UTF-8, UTF-16... o que significa esse numero na frente deles, são os bits que eles comportam?

Link para o comentário
Compartilhar em outros sites

  • 0

Hehe, pesquisa faz milagres. Eu fiz a pergunta e eu mesmo vou responder, estranho, né?

Bem, la vai:

UTF-8: E a codificação que utiliza 8 bits, ela não é usada muito por ser igual ao ASCII, e a vinda do Unicode para a possibilidade da abertura de mais caracteres por ai!

UTF-16: E a codificação que utiliza 16 bits de dados.

UTF-32: E a codificação que utiliza 32 bits de dados.

Bem, eu já percebi que a codificação que eu estou procurando e a de 16 bits, e corri atras da tabela pra mim saber quais são os endereços para os caracteres de 16 bits... Bem, o problema e que achei a tabela em varias linguas, tipo arabico, latin, alemão, so que eu não sei qual e a padrão do Brasil, dos Estados Unidos, e dos Japoneses, e eu precisa dessas tres: Olha só o site oficial deles:

http://www.unicode.org/charts/

Qual dessas tabelas e a que eu estou procurando? E eu mantenho a minha primeira pergunta: então, no meu caso preciso abrir um arquivo binario, ele tambem abriria normalmente, sem precisar fazer modificações, conversões ou coisas do tipo?

Link para o comentário
Compartilhar em outros sites

  • 0

Hehe, pesquisa faz milagres. Eu fiz a pergunta e eu mesmo vou responder, estranho, né?

Bem, la vai:

UTF-8: E a codificação que utiliza 8 bits, ela não é usada muito por ser igual ao ASCII, e a vinda do Unicode para a possibilidade da abertura de mais caracteres por ai!

Bom, não é bem assim exatamente. Ela tem todos os caracteres ASCII/ANSI normais (ou seja, de 0 a 256), mas pode representar os demais caracteres através da formação de unidades de código com o tamanho de até 4 bytes.

Bem, eu já percebi que a codificação que eu estou procurando e a de 16 bits

Se *todos* os caracteres do texto forem formados por 2 bytes ou pares de 2 bytes, então é a UTF-16 mesmo. Se forem apenas alguns, então é a UTF-8. E se forem todos representados por 4 bytes, então é UTF-32.

e corri atras da tabela pra mim saber quais são os endereços para os caracteres de 16 bits... Bem, o problema e que achei a tabela em varias linguas, tipo arabico, latin, alemão, so que eu não sei qual e a padrão do Brasil, dos Estados Unidos, e dos Japoneses, e eu precisa dessas tres: Olha só o site oficial deles:

http://www.unicode.org/charts/

Qual dessas tabelas e a que eu estou procurando?

Bom, o esquema que possui todos os caracteres utilizados aqui no Brasil e nos EUA, é o Latin-1, ou também chamado de ISO-8859-1. Aliás, ele tem caracteres para a maioria dos idiomas derivados do Latim (apesar do Inglês não ser, ele tem todos os símbolos ASCII também, daí o suporte). Já no caso do Japonês, existem duas formas de escrita que são chamadas Hiragana e Katakana. Lá nesse site você encontrará o mapa de ambas.

E eu mantenho a minha primeira pergunta: então, no meu caso preciso abrir um arquivo binario, ele tambem abriria normalmente, sem precisar fazer modificações, conversões ou coisas do tipo?

Não, o ideal seria separar a parte que tem o texto em um arquivo separado e abrir só ele. Se você abrir um arquivo binário que contenha dados arbitrários e texto Unicode você verá os caracteres unicode como bytes separados, porque os mesmos não serão interpretados. Para a correta manipulação de textos Unicode eles devem ser lidos isoladamente.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, valeu! Ao abrir um arquivo, tem como eu saber sua codificação? Se ele é ASCII, UTF-8, UTF-16, UTF-32?

Não, o ideal seria separar a parte que tem o texto em um arquivo separado e abrir só ele. Se você abrir um arquivo binário que contenha dados arbitrários e texto Unicode você verá os caracteres unicode como bytes separados, porque os mesmos não serão interpretados. Para a correta manipulação de textos Unicode eles devem ser lidos isoladamente.

Como assim verei bytes separados, voce diz mostrando byte por byte ao invés do par? E como eles devem ser lidos isoladamente, eu tenho que colocar uma condição definindo o que é unicode e o que não é, e depois apresenta-los?

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, valeu! Ao abrir um arquivo, tem como eu saber sua codificação? Se ele é  ASCII, UTF-8, UTF-16, UTF-32?

Não achei nenhum método pronto para isso, mas achei um código de exemplo que pode ser útil: http://www.devhood.com/tutorials/tutorial_...tutorial_id=469

Como assim verei bytes separados, voce diz mostrando byte por byte ao invés do par?

Você verá byte por byte *ao invés* do caracter. Por exemplo, você verá o par de bytes 53 e 1 (ou seus respectivos caracteres) que formam um único caracter (o "ĵ").

E como eles devem ser lidos isoladamente, eu tenho que colocar uma condição definindo o que é unicode e o que não é, e depois apresenta-los?

O ideal seria isolar a parte que é Unicode para sua correta leitura.

Abraços,

Grayamlkin

Link para o comentário
Compartilhar em outros sites

  • 0
O ideal seria isolar a parte que é Unicode para sua correta leitura

Mas como isola-los? Qual e o Algoritmo para isso?

Aí pode realmente ser um problema. Você teria de saber onde exatamente começa o texto. Uma possível solução seria identifcar pelo BOM (Byte Order Mark), mas pode ser que ele não esteja presente (dê uma olhada no tutorial do outro post). O texto está no meio de um arquivo binário qualquer?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
). O texto está no meio de um arquivo binário qualquer?

Como assim no meio de um arquivo binário qualquer?

Você encontrou textos unicode no meio de uma ROM de jogo de Super-Nintendo? Não era para traduzir um jogo que você estava criando um editor hexa?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, mas tem jogos em que os textos estão em 16 bits, então conclui que o texto que está la dentro é Unicode, já que o ASCII não tem a capacidade de gerar textos de 2 Bytes, sendo que o seu limite de possibilidades e de apenas 255 caracteres, o que o limita a 1 Byte, certo? Ou estou errado?

Link para o comentário
Compartilhar em outros sites

  • 0

Por ambos os motivos. Os caracteres ANSI/ASCII (de 0 até 255) podem ser formados por um byte 0 seguido do byte do caracter. E, os demais caracteres podem ser formados por pares de 2 bytes (se for UTF-16) ou por sequências de até 4 bytes (se for UTF-8).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Bem, isso quer dizer que a leitura de um arquivo como esse e dificil de se fazer?

Provavelmente. Eu posso tentar ver se consigo fazer um esquema para ler, mas eu precisaria que você enviasse pelo menos uns dois arquivos deste tipo. Se quiser, meu e-mail é: wap@openlink.com.br

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Beleza, pode deixar que eu mando, laugh.gif ! Mas meio que fugindo do assunto, olha so isso: Digamos eu eu tenha um arquivo dessa maneira:

abc

ááá

Bem, ai eu leia ele normalmente e exiba:

                      Dim leia As IO.StreamReader
                   Dim palavra, palavras As String
                   leia = IO.File.OpenText("C:\teste.txt")
                   palavras = leia.ReadToEnd()
                   For Each palavra In palavras
                         MsgBox(palavra)
                   Next
                   leia.Close()

Os caracteres com acentos não são lidos... Porque isso? E como faço para lelos normalmente?

Link para o comentário
Compartilhar em outros sites

  • 0

O método OpenText() é para abrir um arquivo UTF-8 (como indica sua descrição no balãozinho amarelo que aparece ao abrir os parênteses). Se o seu arquivo é ASCII/ANSI, você deveria fazer:

        Dim leia As New IO.StreamReader("c:\temp\testea.txt", System.Text.Encoding.Default)

        Dim letra, texto As String
        texto = leia.ReadToEnd()

        For Each letra In texto
            MsgBox(letra)
        Next
        leia.Close()

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Olhei o arquivo que você enviou (Harvest) porém não encontrei algo parecido com um "texto" nele... você sabe me dizer qual a posição exata de onde começa um texto qualquer nele? Não digo aquelas sequências do alfabeto, mas sim palavras e frases.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E ai, Gray, desculpa pelo Flood ai em cima, mas é que meu amigo conseguiu mais rapido do que eu pensava, laugh.gif ! Então, pra visualizar a Rom Harvest Moon, se precisa de um editor Hexa, certo? Bem, olha esse site aqui:

http://www.brgames.org/utilitarios.asp

La tem varios Editores Hexadecimais para voce escolher, eu recomendo o HexEdit ou o Hexposure! Bem, no arquivo tem essa palavra:

supposed

Bem, vai no OffSet 1807047 que voce vai achar essa palavra! Ai se voce observar voce vai ver que s = 0012, u = 0014, e assim vai! Ai estão os textos 16 bits!

Ta ai uma palavra!

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Mas, como você sabe que essa palavra está naquela posição? Tentei UTF-8 e UTF-16 e não consegui achar um "s" com 00 e 12. Aliás, essa combinação em Unicode nem mesmo retorna um caracter com representação gráfica (é o mesmo que chr(12)).

Aliás, é possível que a codificação do arquivo seja própria e não uma padronizada e conhecida.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Assim, pra mim achar essa palavra, eu tive que ir no Editor Hexadecimal, ir em "Busca Relativa", procurar por essa opção. É até engraçado por que voce tem que fazer a busca da seguinte maneira: não pode haver palavras maiusculas e voce tem que colocar um ponto de interrogação entre cada letra. Por exemplo: se eu for procurar a palavra "Saurus", eu tenho que procurar da seguinte maneira:

a?u?r?u?s

E como assim é o mesmo que Chr(12)? E outra: Se no caso como voce disse a padronização do arquivo for propria, deixa eu ver se eu acho uma palavra apropriada para isto... "f****", não é verdade?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.




  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...