DUVIDA SINISTRA CHR 0
Galera, ontem um cliente me ligou falando que não conseguia enviar um arquivo q passava pelo ASP o relatório de movimentação para a Matriz através da importação de dados de um arquivo de texto, pois bem, essa rotina funcionava bem a mais de 8 meses, sem nenhuma reclamação, aà eu pensei, não é possÃvel que tem uma falha na minha rotina, e não achei nenhuma, peguei o mesmo arquivo, rodei no servidor de desenvolvimento e funcionou bem, mas a cópia que tava no servidor de produção não funcionava, comecei a achar que o arquivo estava corrompido...
Depois de inúmeros testes (mais de 2 horas em cima disso) achei uma linha que tinha o seguinte formato:
ProdutoX ;
para resolver tentei dar um trim na variavel para limpar os espaços, visto que quando o ";" é um delimitador, ele não vai para as variáveis, então o trim não limpava, vi que não era o espaço
converti a string para código ASCII e vi que essa string vazia era o codigo ascii 0 e não o 32 (se eu não me engando o 32 é espaço)
e o pior, tudo que eu concateno com essa variavel, depois do chr(0) não concatena nada
eu consegui contornar o problema, mas alguem sabe pq isso acontece, vejam, rodem o seguinte código:
vejam q sinistro, se alguem tiver alguma explicação, por favor, não se acanhe (sempre quis dizer isso )
Depois de inúmeros testes (mais de 2 horas em cima disso) achei uma linha que tinha o seguinte formato:
ProdutoX ;
para resolver tentei dar um trim na variavel para limpar os espaços, visto que quando o ";" é um delimitador, ele não vai para as variáveis, então o trim não limpava, vi que não era o espaço
converti a string para código ASCII e vi que essa string vazia era o codigo ascii 0 e não o 32 (se eu não me engando o 32 é espaço)
e o pior, tudo que eu concateno com essa variavel, depois do chr(0) não concatena nada
eu consegui contornar o problema, mas alguem sabe pq isso acontece, vejam, rodem o seguinte código:
MsgBox "---->" & Chr(0) & "<----"
vejam q sinistro, se alguem tiver alguma explicação, por favor, não se acanhe (sempre quis dizer isso )
Ow, ninguem viu esse problema? Será que é só no meu VB? Alguem de um sinal de vida plz!
Mochilão achei interessante este seu post!
Veja fiz o teste e ficou do mesmo jeito
Estranho....
Muito estranho...
Veja fiz o teste e ficou do mesmo jeito
Private Sub Command1_Click()
valor = "123456" & Chr(0)
valor = valor & "7890"
MsgBox valor ' retornou somente [txt-color=#0000ff]123456[/txt-color]
'agora o tamanho da variável
MsgBox Len(valor)
retornou [txt-color=#ff0000]11![/txt-color] ou seja! ... 1234567890 = 10 e chr(0) = 1 ... 10 + 1 = 11
End Sub
Estranho....
Muito estranho...
Mochilão
Alguns tipos de dados são intercambiados por várias aplicações terminados em chr(0) ou ainda delimitados por chr(0).
Muitas apis feitas em c/c++ são terminadas por chr(0), sendo necessário que o contexto retornado seja sem o chr(0) (vide por exemplo rotinas para pegar o diretório do windows ou semelhantes).
O interessante é porque o arquivo que até então funcionava direitinho começou a apresentar chr(0) em seu conteúdo. Muitas rotinas que já và usam o chr(0) como um delimitador final de string, ou seja, ela termina em nulo (valor + um caracter nulo), e assim dizem ao programador que chamou a string que ela termina naquele dado ponto, essa é a função de chr(0) em muitos casos.
Alguns tipos de dados são intercambiados por várias aplicações terminados em chr(0) ou ainda delimitados por chr(0).
Muitas apis feitas em c/c++ são terminadas por chr(0), sendo necessário que o contexto retornado seja sem o chr(0) (vide por exemplo rotinas para pegar o diretório do windows ou semelhantes).
O interessante é porque o arquivo que até então funcionava direitinho começou a apresentar chr(0) em seu conteúdo. Muitas rotinas que já và usam o chr(0) como um delimitador final de string, ou seja, ela termina em nulo (valor + um caracter nulo), e assim dizem ao programador que chamou a string que ela termina naquele dado ponto, essa é a função de chr(0) em muitos casos.
Interessante, não sabia disso, mas o problema ocorre no meio do arquivo de texto...
Outra coisa mais "sinistra", o programa que gera o arquivo de texto foi feito pela nossa empresa e eu tenho certeza que o outro programador que fez isso não conhecia o chr(0),
interessante mesmo!!
o problema deve ter sido na hora que o usuário salvou o arquivo no disquete ou ainda deu o upload do arquivo no servidor asp por intermedio de uma rotina de upload que até hoje ainda é uma incognita para mim... (não estudei ela ainda e o abençoado que criou ou copiou akela monstruosidade não trabalha mais na empresa...)
bom é isso aÃ, valeu pela explicação WM, vou encerrar o tópico!
Valeu!
Outra coisa mais "sinistra", o programa que gera o arquivo de texto foi feito pela nossa empresa e eu tenho certeza que o outro programador que fez isso não conhecia o chr(0),
interessante mesmo!!
o problema deve ter sido na hora que o usuário salvou o arquivo no disquete ou ainda deu o upload do arquivo no servidor asp por intermedio de uma rotina de upload que até hoje ainda é uma incognita para mim... (não estudei ela ainda e o abençoado que criou ou copiou akela monstruosidade não trabalha mais na empresa...)
bom é isso aÃ, valeu pela explicação WM, vou encerrar o tópico!
Valeu!
Tópico encerrado , respostas não são mais permitidas