BUG DO VB.NET 2008
Esto ucom um problema com o vb 2008 que ja está me deixando maluco
não faço ideia porque que está acontecendo isso
eu tenho um array e preencho ele com informações de um listbox
ex.: dim campos () as string
ja dei o redim nesse campos direitinho então ele fia com um tamanho fixo
só que quando eu mando concatenar ele com algum caracter, ele concatena somente em alguns casos
ex.:
se eu colocar msgbox( [Ô] [ô] [Ô] & campos(0) & [Ô] [ô] [Ô])
as vezes manda como resultado, [ô] [ô] que seria certo quando o array estiver com o valor zerado,
mas as vezes manda como resultado somente [ô].
eu posso colocar mais um milhão de coisas depois que ele não concatena
ex.: se eu colocar msgbox( [Ô] a [Ô] & [Ô] b[Ô] & [Ô] c [Ô] & campos (0) & [Ô] d [Ô] & [Ô] f [Ô] & [Ô] g [Ô]) levando em consideração que o campos(0) stá preenchido com [Ô][Ô], ele deveria mandar uma mensagem [Ô] a b c d e f g [Ô], só que ele manda a mensagem [Ô] a b c [Ô] e simplesmente IGNORA tudo que tem depois do array.
alguem sabe me falar o que que pode estar acontecendo??????
agradeço toda ajuda
fiquem com Deus!
olha que coisa mais extranha...
que neim eu falei, esse array é populado com informações de um list box
esse list box é populado com informações de um arquivo texto
eu simplesmente abir e salvei o arquivo texto SEM FAZER NENHUMA MODIFICAÇÂO nele, e passou a funcionar,
ae pra confirmar meu teste eu coloquei novamente o arquivo texto original para popular esse lisbox e voltou a dar erro
ae abri e salvei o arquivo novamente e deu certo.
pow.. comecei a chegar em algum caminho.
será que a falha está no código para popular o list e não no array???
o que me deixa curioro é que se fosse algum erro eu teria uma mensagem de erro, mas nesse caso o vb simplesmente ignora tudo que eu coloco depois do array
tipo... não da erro de overflow neim nada..
ele continua o código sem concatenar o resto da linha.
se realmente o erro for na hora de popular o listbox, como que pode estar dando esse bug?
isso que está me deixando cuiroso. pq independente do valor que tiver no array, ele tem que concatenar
tentei até o metodo string.concat e não deu certo
só da certo se eu abro e salvo o arquivo texto.
estranho*
Citação::
Pow...
olha que coisa mais extranha...
que neim eu falei, esse array é populado com informações de um list box
esse list box é populado com informações de um arquivo texto
eu simplesmente abir e salvei o arquivo texto SEM FAZER NENHUMA MODIFICAÇÂO nele, e passou a funcionar,
ae pra confirmar meu teste eu coloquei novamente o arquivo texto original para popular esse lisbox e voltou a dar erro
ae abri e salvei o arquivo novamente e deu certo.
pow.. comecei a chegar em algum caminho.
será que a falha está no código para popular o list e não no array???
o que me deixa curioro é que se fosse algum erro eu teria uma mensagem de erro, mas nesse caso o vb simplesmente ignora tudo que eu coloco depois do array
tipo... não da erro de overflow neim nada..
ele continua o código sem concatenar o resto da linha.
se realmente o erro for na hora de popular o listbox, como que pode estar dando esse bug?
isso que está me deixando cuiroso. pq independente do valor que tiver no array, ele tem que concatenar
tentei até o metodo string.concat e não deu certo
só da certo se eu abro e salvo o arquivo texto.
Sendo assim , muito provavelmente o erro está na geração do arquivo txt. Verifique o formato que vc salva e na geração do txt salve no mesmo formato.
não seria se eu colocar msgbox( [Ô] [ô] [Ô] + campos(0) + [Ô] [ô] [Ô]) ou não faz diferença ?
Inclusive o que me chama mais atenção é que estes mesmos arquivos não apresentam problemas numa operação semelhante em um programa feito no vb6
O que acontece é o seguinte.
O ERP da empresa gera alguns arquivos TXT para integração com outro sistema de vendas
Existe um programa que le esses arquivos txt e converte para o formato que o sistema de vendas possa entender
Esse programa ja existe, inclusive desenvolvido em VB6.
Estamos trabalhando em uma nova versão, então estou reescrevendo o programa usando o VB2008
O curioso é que OS MESMOS arquivos com o vb6 não dão problema, e no vb2008 já estão dando isso.
Com isso agente descarta a possibilidade de eles estarem sendo gerado com falha.
Só que o que me deixa mais curioso é que o código que eu fiz para abrir esses arquivos é o mesmo para todos os arquivos txt gerados pelo ERP, e não estou tendo problemas para abrir esses arquivos. Então descarto falhas na abertura do arquivo txt.
Eu abro esse arquivo txt num list box, e divido cada linha em sessoes diferentes. Logo depois eu populo um array com cada sessão.
Se o array tivesse estourado eu teria uma mensagem de erro, se estivesse em branco ou sem valor, era para dar certo da mesma forma, tanto é que só estou tendo problemas com um arquivo especifico.
Isso ta me deixando doido.
vou postar os códigos para vocês entenderem
Uso este sub para abrir o arquivo txt em um list box
Private Sub Abrir_Arquivo(ByVal arquivo As String)
[ô]Abrir Arquivo para um ListBox
Dim Texto As IO.StreamReader
Dim linha As String
lstArquivo.Items.Clear()
If IO.File.Exists(arquivo) Then
Texto = New IO.StreamReader(arquivo,System.Text.Encoding.Default)
linha = Texto.ReadLine
While linha <> Nothing
lstArquivo.Items.Add(linha)
linha = Texto.ReadLine
End While
Texto.Close()
Else
MsgBox([Ô]O Arquivo não existe[Ô])
End If
End Sub
e para cada linha eu uso essa sub para dividir a linha em sessoes e popular o array
Private Sub Processa_Campos(intLinha)
Dim y As Integer
Dim x2 As Integer
Dim x1 As Integer
y = 0
x1 = 1
For x2 = 1 To Len(lstArquivo.Items(intLinha).ToString)
If Mid(lstArquivo.Items(intLinha).ToString, x2, 3) = [Ô]\;\[Ô] Then
If x1 = 1 Then
campo(y) = (Mid(lstArquivo.Items(intLinha).ToString, x1, (x2 - x1)))
Else
campo(y) = (Mid(lstArquivo.Items(intLinha).ToString, x1 + 3, (x2 - x1) -3))
End If
x1 = x2
y = y + 1
If y > tamanho_Array then
Exit Sub
End If
End If
Next
campo(y) = (Mid(lstArquivo.Items(intLinha).ToString, x1 + 3, (x2 - x1) - 3))
End Sub
ae para cada linha, primeiro eu processo os campos,
depois eu monto uma especie de sql com eles e executo
ae passo para a proxima linha e faço o mesmo.
é o MESMO código para TODOS os arquivos txt
só que em um especÃfico quando eu mando concatenar os campos para formar a sql, ele não concatena ae a sql fica errada.
Só que ae eu vou lá no Windows, abro o arquivo especifico, salvo sem fazer NENHUMA modificação, fecho e mando fazer a conversão novamente não da nenhum erro.
Não tenho ideia do que pode estar acontecendo mesmo.
e o mais importante... como que eu modifico isso??? hehhehehehe
ja troquei o System.Text.Encoding para vários diferentes.
Existe outro método para abrir arquivos???
muito obrigado!
Fiquem com Deus@
DaÃ, vc terá dois arquivos.
Agora vc faz o download do app Hex Editor Neo
Vc abre os arquivos salvos e vê se tem algo diferente entre os dois.
Nesse programa, não está disponÃvel a opção de comparar o arquivo, mas tem uma opção que exibe o encoding do arquivo.
Talvez isso ajude a encontrar o problema.
não é que estamos chegando num caminho! heheheh
então, fiz exatamente o que voce sugeriu!
o encoding eu vejo na barra de status do programa???
se sim parece que todos os dois arquivos usaum o mesmo encoding. Default.ANSI.
Mas encontrei uma coisa que me chamou atenção
tem uma opção lá que compara dois arquivos.
Ae eu comparei os arquivos.
Ele encontrou algumas divergencias. Me parece que no arquivo original tem alguns caracteres lá que estão com o Hex [Ô]00[Ô], e quando eu simplesmente salvei, mesmo sem alterar, esses caracteres foram convertidos para o Hex [Ô]20[Ô].
Procurei saber, me parece que esse Hex 00 é indicador de final de linha ou algo do tipo, enquanto que o hex 20 é indicador de espaço.
Posso estar falando merda, mas me parece que o arquivo original foi gerado corrompido e quando eu salvei ele acertou essas falhas com espaço.
Só que não consigo ver isso no notepad pq ele ja converte essas falhas em [Ô] [Ô] automaticamente.
A minha dúvida agora é a seguinte.
Como que eu posso abrir o arquivo convertendo esses Hex 00 para Hex 20, pq pelo que vi quando eu abro o arquivo, se tvier esse Hex 20 ele já quebra a linha.
eu tentei colocar na sub Processa_linha um código para tratar se for Hex 00, só que quando eu mando abrir a linha, ele abre a linha até onde chega o Hex 00 e depois quebra.
Ex.:
se eu tiver uma linha com 40 caracteres e o hex 00 estiver na posição 25.
se eu mandar um msgbox com essa linha ou qualquer outro tratamento, ele só me manda até o caracter 24. Ele ignora tudo que tem depois do 25.
Por isso que tava dando aquele erro.
Bem... MUITO OBRIGADO DE VERDADE por me ajudar a indentificar esse erro..
Será que existe alguma maneira de eu corrigir isso no meu próprio programa.
Vai ser praticamente impossivel pedir para a galera do erp corrigir isso, então fica mais facil o meu programa tratar isso.
Como que eu posso tratar isso ja que quando eu abro o arquivo ele quebra a linha quando chega nesse ponto?
Muito obrigado denovo
Fiquem com Deus!