LER CABE?ALHO DE ARQUIVO

CHOPPER 06/07/2014 14:09:34
#439365
Em VBA usando o
Line Input #iFF
consigo estrair o conteudo ( não exatamente certinho ) mas funciona, consigo extrair o conteudo necessario.
Citação:

DMÀ={[Ô]Id[Ô] : 3,[Ô]dataVersion[Ô] : 0,[Ô]detail[Ô] : [ { [Ô]basePoints[Ô] : 0, [Ô]boostIpEarned[Ô] : 0.0 ....................... e por ae vai...................... teminando com algumas linhas tipo isso ì€aìãžÁ¼ƒ¦Cˆ*ª/ðV×Ý-5¶J¦



em VB.net o maximo que consigo usando
StreamReader
entre outras maneiras é retornar NADA ou
Citação:

apenas assim, algo do tipo ì€aìãžÁ¼ƒ¦Cˆ*ª/ðV×Ý-5¶J¦



como retornar em VB.NET o mesmo conteudo que eu consigo em VBA usando LINE INPUT?

desde já agradeço a atenção!
JCM0867 06/07/2014 22:47:35
#439368
Fiz isso hoje mesmo
Depois do VB6 nunca mais usei Line input

no VB.net
num botão lê a primeira Linha:
[txt-color=#0000f0]Dim texto As New IO.StreamReader([Ô]C:\Diretorio\[Ô] & Arquivo)
msgbox( texto.ReadLine)[/txt-color]

para ler várias linhas faz um While
[txt-color=#e80000]Dim texto As New IO.StreamReader([Ô]C:\Diretorio\[Ô] & Arquivo)
While Not texto.EndOfStream
msgbox(texto.ReadLine)
End While
texto.Close()[/txt-color]

Convenhamos, muito mais simples que o Line Input


O ignorante também tem boas idéias, só que não chega perceber.
Autor desconhecido

CHOPPER 08/07/2014 13:26:02
#439416
Realmente bem melhor esse !!!
para ler arquivos normais jah vou usar ele ! heheh
porem o arquivo que quero ler esta mais complexo

em VB.NET não aparece o texto fica apenas a inicial um texto ilegivel não é ascii
o arquivo não é txt por isso que complica...
alias não era pra complicar né... pois no VBA FUNCIONA
em VB.NET sai assim quando manda ler todo o arquivo
Citação:

DMJJKKJJJJ[µ‰=žYÜÈíÈ )C¸îT5ÃŒê}_s°‹šo ½-w‰=¦ÔÁ[ô]B<Pa‡—RM_ oêׄËyx ­ôÚaW†ú«MÅ’>ö''/ƒŽ™ú»#ø¦#¯½T7BäX±•E³Í¡§ÍŒÅðÛÊì21¹|>ۏ2à ™â}±Õ)âß+[,ìƒiöÖéåĨ¥)ušëT岐ˆ(féxz²XøÅ „d཈7÷—åN4é²MU5mOdØøYE| 8m‰'µv2øz™îüðvüì|>Ö•…Œ}¹@jûÈËI£ ,Ú=¿k}Å’21Vã f%ý©å)icWBZî'[ÏŒcÛﱁúØ8Žcâ*qJùãqíã|£&²òÙŒe›ãË®ûíwÁŸÄ?¶žwN.ö?Ü®Î@z²;ëP„•i.–Ó!ví'EÃŽÒæ7ìh×*¤ 3䘷RŽX«O;ëb*‚!K}7Ö¢·÷*Å jtÞ¤ò¿[ô]f
×'îp
“–üZ¿à¶÷×|[ÆwÃ’:S—nÈl.jµ„*ûj9[ô]„V± ófpZi7ÙwÞT.........................continua.........


Em VBA a parte é bem extensa não cabe aqui tudo, mas aparece o conteudo legivel ( apenas um pedaço que é legivel é esse q eu quero)
Citação:

DMÀ={[Ô]championId[Ô] : 3,[Ô]dataVersion[Ô] : 0,[Ô]detail[Ô] : [ { [Ô]basePoints[Ô] : 0, [Ô]boostIpEarned[Ô] : 0.0, [Ô]boostXpEarned[Ô] : 0.0, [Ô]clientId[Ô] : [Ô]gn-202777288[Ô], [Ô]coOpVsAiMinutesLeftToday[Ô] : 180, [Ô]coOpVsAiMsecsUntilReset[Ô] : -1.0, [Ô]completionBonusPoints[Ô] : 0, [Ô]customMinutesLeftToday[Ô] : 102, [Ô]customMsecsUntilReset[Ô] : 76073034.0, [Ô]destination[Ô] : [Ô]messagingDestination[Ô], [Ô]difficulty[Ô] : [Ô]EASY[Ô], [Ô]elo[Ô] : 0, [Ô]eloChange[Ô] : 0, [Ô]experienceEarned[Ô] : 0.0, [Ô]experienceTotal[Ô] : 0.0, [Ô]firstWinBonus[Ô] : 0.0, [Ô]gameMode[Ô] : [Ô]CLASSIC[Ô], [Ô]gameid[Ô] : 30891.................continua..........



tentei diversas formas sem sucesso,
por isso estou tentando agora pegar o arquivo ler ele em hex e desse hex transformar em ascii e quando nao for mais ascii encerra a leiura, já vai virando uma POG ! ha HA ha HA ha HA ha

Funcionou em VBA o seguinte:
Sub LerVideo()
Dim iFF As Integer
Dim sLinha As String

iFF = FreeFile
Open [Ô]P:\Videos\308918063.mlr[Ô] For Input As iFF
Line Input #iFF, sLinha
Debug.Print sLinha
Close iFF
End Sub

OCELOT 08/07/2014 14:59:55
#439417
Bom, você diz que o arquivo não é um arquivo de texto mas está tratando ele como se fosse um arquivo de texto, então ai já está um erro.

O StreamReader provavelmente retorna este valor porque por padrão ele usa a codificação UTF8 a menos que você passe alguma outra codificação para ele.

Não sei como você estava abrindo o arquivo, que para suas futuras dúvidas eu recomendo que poste o código do que você fez junto com a dúvida e não só o resultado, mas se você criar o StreamReader mais ou menos assim

Dim meuReader As New System.IO.StreamReader(caminhoDoArquivo, System.Text.Encoding.Default)

Ele então vai usar a codificação padrão do Windows no idioma atual, que eu não tenho certeza mas acho que é o que o VB6/VBA faz
CHOPPER 09/07/2014 02:54:46
#439422
BAH !!! ae sim !!! gostei de ver !!! eheeh
Sim ! eu havia testado esse e alguns outros listados no site http://msdn.microsoft.com/
e agora vc falando sobre o erro estar na codificação e do padrão streamreader ser UTF8
acabei lendo mais sobre ele e me encaminou mais pra frente !!! acho q esse é o rumo mesmo entao

acabei me deparando com Método Encoding.GetPreamble e Classe UnicodeEncoding e se vai a lista
estou lendo e continuo fuçando... como Byte Ordem Mark ( BOM ) achei o BOM quando vi EOF que mudava de codificaçào pra codificaçào e por ae to indo...
Eu nao consegui entender o seguinte ele esta em ANSI e o Default !? nao era pra eu precisar do BOM.... ele é ANSI entao era pra ler...
OCELOT 09/07/2014 09:30:24
#439427
Existem vários encodings que são muito parecidos, então pode ter mais de um que vá conseguir ler o arquivo, o grande problema do UTF8 é que ele usa um número variado de bytes para cada caractere, caracteres até o 127 se não me engano usam um byte só, acima disso ele segue algumas regras para identificar quantos bytes tem o caractere e por isso ficava tão errado.

Já os encodings que usam um byte só costumam ter os caracteres mais comuns com o mesmo valor, só mudando o caso dos caracteres específicos de alguma língua, como os com acento, como neste caso ele não parece ter nenhum destes caracteres, tendo apenas os que são em comum entre as duas codificações.

Já o BOM é mais para o caso de encodings multi-byte, porque digamos que cada caractere tenha 2 bytes, em um processador baseado na arquitetura x86 ele é interpretado da forma que o primeiro byte é mais significativo que o segundo então se você pegar em hexadecimal o valor 256 o valor vai estar em dois bytes na ordem 01 00, porém em processadores baseados na arquitetura do PowerPC (antigos Macs por exemplo) ele usa a ordem inversa, primeiro vem o byte menos significativo, então esse mesmo valor em memória ficaria ao contrário (00 01), e quando gravado em arquivo aconteceria o mesmo, então para poder ler um arquivo de texto que usa caracteres multi-byte primeiro eles gravam o BOM (byte order mark, ou marca de ordem dos bytes) assim o programa que lê o arquivo sabe como deve interpretar estes caracteres.

Só que o BOM é opcional, mesmo encodings que usam ele como o UTF-8 não é obrigatório ter ele
JCM0867 09/07/2014 11:44:58
#439429
essa imagem acima me recordou quando eu programava EPROM em 1991 no meu estágio de engenharia eletrônica
CHOPPER 10/07/2014 20:09:22
#439454
ainda sem êxito !
varios testes
>>>Imports System.IO
>>>Imports Microsoft.VisualBasic
>>>Imports System.Windows.Forms.Form
>>>Imports System.IO.TextReader
>>>Imports System.Text
>>>Imports System.IO.Stream
>>>Imports System.IO.File
Vish muitos F5 já ! ha HA ha HA
vou tentar mais ainda... hj a noite..
li nesse site aki http://www.cryptosys.net/pki/manpki/pki_stringstobytes.html
fala eu acho que uns 2 ou 3 padroes de codificação concernente....
é interessante pois dele virá mais testes ! hehehe

mas ainda sem entender do pq do bug no VBA de ler sem problemas e no .net ser complexo e mesmo estando aparentemente [Ô]correto[Ô] ele teima em nao funcionar como o esperado !
OCELOT 11/07/2014 13:34:09
#439468
Existe a possibilidade de você mandar um exemplo de como está tentando fazer com um arquivo destes para a gente dar uma olhada melhor?

Esse arquivo é de onde? Parece ser alguma coisa de algum jogo, pelo pouco que da pra ver ele parece ter um cabeçalho de 8 bytes e o resto parece ser texto, e pelo formato parece ser JSON

Uma coisa também para se levar em consideração, strings são bem diferentes no .Net e no VB6/VBA, a forma como são representadas na memória e a forma como eles leem os arquivos, como esse arquivo não é exatamente texto talvez você tenha que reconsiderar a forma como está lendo o cabeçalho, talvez seja melhor ler de forma binária, talvez ler os primeiros 4, ou talvez os primeiros 8 se for o caso e usar o valor deles para saber se é mesmo o arquivo
Faça seu login para responder