Andersonjb
-
Total de itens
580 -
Registro em
-
Última visita
Posts postados por Andersonjb
-
-
Nossa, nunca imaginaria que isso estivesse acontecendo, :blink: . Pra mim, o caracter só possuia 1 byte, nada mais que isso.
Bem, como posso escrever caracteres de apenas 1 byte no arquivo, o correto seria fazer isso, certo?
arquivo.Write(b(0))
Mas o arquivo continua não funcionando. Eu estou fazendo certo?
-
Assim:
arquivo.Seek(x - 1, IO.SeekOrigin.Begin) Dim l As Char = caracteres(j) arquivo.Write(l)
Simplesmente assim, movo o arquivo pra posição que eu quero, e escrevo, retirando o caracter de uma matriz de caracteres.
-
Não, Gray, eu não pego os bytes do arquivo porque eu vo manipular coisa grande, arquivos de até 700 Megas. Eu simplesmente to criando a Stream e girando o arquivo, e substituindo os dados a partir de um ponto determinado. Agora, eu realmente acho que tem essa história dos dois bytes por causa disso:
Você pode verificar se este caracter que você está escrevendo tem apenas um byte olhando se na posição posterior a qual ele é inserido permanece o mesmo byte que estava antes.E não permance, sempre modifica.
Alguma opnião?
-
E como eu discarto esse byte :blink: ???
-
Putz, isso realmente acontece. Então quer dizer que eu estou gravando um dado em Unicode? E como faço para que isso não aconteça?
-
O arquivo é um jogo. Ele roda normalmente, mais quando insiro e vou joga-lo, ele não pega. E como assim verificar se um o caracter tem somente 1 byte?
-
Eu editei o Post acima Gray, mais a unica coisa que eu faço demais é comparar o caracter que eu quero inserir com uma lista de caracteres ( na matriz caracteres(j) ), e se estiver na lista, ele insere da maneira como editei acima. Alguma cagada?
-
E ai Gray, beleza? Bem, estou tendo mais problemas. :(
Bem, como você sabe, estou mechendo com arquivos binários, e no arquivo não pode ser implementada ou retirada nenhuma informação. Estou lendo o arquivo da seguinte maneira:
Dim arquivo1 As New IO.FileStream(nomerom, IO.FileMode.Open, IO.FileAccess.ReadWrite) Dim arquivo As New IO.BinaryWriter(arquivo1, System.Text.Encoding.Default)
Mais acontece que o arquivo está sendo comropido, na hora de eu inserir os dados. Bem, para inserir o dado, eu levo o arquivo até a posição que eu quero:arquivo.Seek(x, IO.SeekOrigin.Begin)
Depois, adiciono o dado:Dim l As Char = caracteres(j) arquivo.Write(l)
Bem, como pode ver eu tenho uma matriz, que eu pego de um indice, adiciono no arquivo, e mando gravar. Mas acontece que o arquivo se corrompe depois da gravação. O que eu fiz de errado?
-
Você diz enteder como funciona e fazer tudo na raça?
-
Não, ela é um pouco popular sim, ela foi criada em 1977! Antiga, né? Cheguei a achar textos sobre ela mais nenhum método de como usa-la e tals... Olha ai o que eu achei:
Lempel-Ziv e VariantesAbraham Lempel e Jacob Ziv (Lempel-Ziv ou LZ) foram os criadores desse popular tipo de compressão, em 1977 (77!). A compressão Lempel-Ziv é denominada "compresão de texto utiliando um dicionário", onde o texto seria o código a ser comprimido e o dicionário é o que fará o texto ser comprimido e descomprimido. O formato básico da utilização deste dicionário seria lembrar onde está o texto repetido e queüantos caracteres do mesmo jeito que visto mais a frente, em um arquivo, sendo o dicionário inicialmente implantado como um endereço que aponta para outro anterior do arquivo. Complicado?
Vamos verificar, no nosso arquivo A.BIN temos esta determinada seqüência de dados no endereço 0x00 (convenientemente escolhido): "AAAAAAAAAAAAA", estes dados são armazenados em um BUFFER (no nosso querido PC, a memória RAM como exemplo) e são comparados até se achar outro texto igüal. A partir do endereço 0xFF, temos o seguinte texto: "AAAAAAAAAAAAA", opa! É o mesmo texto, então aí começa a compressão: o texto "AAAAAAAAAAAAA" poderia ser substituído por "0013", onde "00" seria o endereço onde o texto apareceu antes e "13" o tamanho do texto repetido em "00", nesse caso, o caractere "A"! Só lembrando mais uma vez, "13" é o numero de caracteres para contar a partir do endereço "00", e não o número de vezes repetido, para não confundir com RLE!
Essa é a idéia básica! Veremos agora um exemplo com seqüências complexas antes de entrarmos no dicionário.
E alem dela, ainda tem suas variantes...
-
Bem, mais só tem essas? É que eu precisava pra uma compressão chamada LZss. já ouvi ufalar?
-
E ai pessoal, queria saber se o VB.NET tem alguma biblioteca ou API que trabalhe com Compressão de Dados, vocês sabem de alguma coisa?
-
Bem, pro pessoal que as vezes acompanha o tópico ai, vai saber, né, eu vou postar como eu consegui fazer:
arquivo.BaseStream.Seek(x, IO.SeekOrigin.Begin)
Onde "x" é a variavel da posição do arquivo. Na verdade, o titio Gray que me ensinou. :P E gray, eu tenho outra duvida: bem, eu estou girando o arquivo em um For usando isto que você me passou, só que na hora de declarar a Stream de Leitura, está dando erro. Eu estou declarando asssim:Dim arquivo As New IO.StreamWriter(nomerom, System.Text.Encoding.Default)
Só que da esse erro:
O que que é isso?? Bem, pro pessoal que as vezes acompanha o tópico ai, vai saber, né, eu vou postar como eu consegui fazer:Overload resolution failed because no accessible 'New' can be called with these arguments: 'Public Sub New(path As String, append As Boolean)': Value of type 'System.Text.Encoding' cannot be converted to 'Boolean'. 'Public Sub New(stream As System.IO.Stream, encoding As System.Text.Encoding)': Value of type 'String' cannot be converted to 'System.IO.Stream'.arquivo.BaseStream.Seek(x, IO.SeekOrigin.Begin)
Onde "x" é a variavel da posição do arquivo. Na verdade, o titio Gray que me ensinou. :P E gray, eu tenho outra duvida: bem, eu estou girando o arquivo em um For usando isto que você me passou, só que na hora de declarar a Stream de Leitura, está dando erro. Eu estou declarando asssim:Dim arquivo As New IO.StreamWriter(nomerom, System.Text.Encoding.Default)
Só que da esse erro:
Overload resolution failed because no accessible 'New' can be called with these arguments:'Public Sub New(path As String, append As Boolean)': Value of type 'System.Text.Encoding' cannot be converted to 'Boolean'.
'Public Sub New(stream As System.IO.Stream, encoding As System.Text.Encoding)': Value of type 'String' cannot be converted to 'System.IO.Stream'.
O que que é isso??
-
Bem, isso ai deu certo Gray.
O meu método de como "rodar" o arquivo da certo tambem, então eu vou seguir ele mesmo. Só que eu estou com um problema: como eu faço para levar o Metodo Read para uma determinada posição do arquivo? Por exemplo, o tamanho do arquivo é 100, e eu tenho um laço com o contador, certo? Só que eu quero começar a ler a partir do dado 50, só que ele sempre vai ler do dado 0, como eu faço para que ele comece a ler do dado 50, por exemplo?
-
Bem, eu sei que faiz tempo que não continuo essa duvida, mas vamos la:
Eu vi que se eu souber a quantidade de caracteres do arquivo eu posso coloca-lo em um For e ler caracter por caracter, usando somente o Método Read. Só que o problema é pegar a quantidade de caracteres sem passar o conteúdo do arquivo para uma variavel, já que eu estou tentando evitar isso. Bem, tem como pegar a quantidade de caracteres do arquivo sem colocar seu conteúdo em uma váriavel?
-
Descobri, gray, é so colocar o Refresh antes do EndCurrentEdit, que dá certo! valeu, Falows!
-
Eita, quanta pergunta! É mais ou menos assim:
Tipo, eu lembro que você me falou que quando está o Lápis na DG é porque está em modo de edição e quando está a setinha é porque já foi fechado o modo de edição, certo? Pois bem, digamos que eu queira inserir o nome Jaba, uma letra em cada coluna, "J" na 1º coluna, "a" na 2º, "b" na 3º e "a" na 4º. Acontece que quando eu digito a ultima letra, e clico em um botão que vai salvar os dados da DG em uma DataTable, o ultimo dado que eu digitei, no caso a 4º letra, simplesmente desaparece da DG e não aparece na DT. Ai você falou que era porque o seu modo de edição ainda estava aberto, e eu tinha que fecha-lo. Bem, na época funcionou com esse código que você passou, mas agora não esta funcionando, entendeu?
Olha só, acabei de achar o tópico que você me explicou:
-
Alguma opnião, Gray?
-
Retirei ela via código e consegui, só não sei porque ela deu esse pau. Falows!
-
Assim que eu mecho com a DG no evento Load do Form:
dgtabela.ReadOnly = False -
Da erro sim, quando ele chama o evento Load do Form, eu seto uma propriedade da DG, e ele dá o seguinte erro:
Object reference not set to an instance of an object.Ajudou?
-
Opa, são iguais, é que eu coloquei DG nas outras pra simplificar invés de ficar colocando os nomes das minhas coisas aqui, mais elas são as mesmas.
-
Bem, se ela é compilada, porque ela não aparece aqui? E agora nem compilando ela está mais.
-
E ai pessoal, beleza? Eu estou com um probleminha aqui que não consigo resolver. Bem, para se fechar a edição de uma DG é só fazer isso, não é?
Dim cm As CurrencyManager = Me.dg.BindingContext(dgtabela16bits.DataSource) cm.EndCurrentEdit() cm.Refresh() dt = dg.DataSource
Só que acontece que o ultimo dado ainda não é salvo, o que eu estou fazendo de errado?
Arquivos Binários
em .NET
Postado
Sim, mas o arquivo continua se corrompendo da mesma maneira. Acho que não é esse o problema do meu programa. :(