Página 2 de 3

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Sex Mar 22, 2019 12:40 pm
por LuizFeijo
Reinaldo escreveu: Qui Mar 21, 2019 9:42 pm Na posição 296 à 304 encontra-se o campo que"negritou" em seu post anterior "13091800000000000..."
assim o "valor" está entre aspas pois o retorno e strings(texto), deixei comentado apenas como deve ser a sintaxe se quiser/necessitar utilizar esse local para comparação.
pode me explicar também este>>..
Cada caractere corresponde a um numero na tabela ASCII (veja um exemplo/modelo em : "https://web.fe.up.pt/~ee96100/projecto/ ... 0ascii.htm
As letras de nosso alfabeto (maiúsculas) vão de 65 à 90 por isso se xAsc estiver nesse intervalo, o caractere da posição corresponde a uma letra
no caso da parte "130918", o vba faz alguma verificação para saber se na posiçao 296 à 304 existe o numero "130918", ou verificação é para ver se existe um numero qualquer nesta posição?

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Sex Mar 22, 2019 5:50 pm
por Reinaldo
Nessa proposta--> If Mid(L, 296, 6) = "130818" <-- e verificado se o conteúdo de 296 à 304 é igual a "130818"
A sintaxe da função mid é -->Mid(string, start[, length])<-- (similar a função deplanilha Ext.Texto)
E retorna um String(Texto) de seis caractere

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Seg Mar 25, 2019 1:19 pm
por LuizFeijo
Reinaldo escreveu: Sex Mar 22, 2019 5:50 pm Nessa proposta--> If Mid(L, 296, 6) = "130818" <-- e verificado se o conteúdo de 296 à 304 é igual a "130818"
A sintaxe da função mid é -->Mid(string, start[, length])<-- (similar a função deplanilha Ext.Texto)
E retorna um String(Texto) de seis caractere
Bom dia Sr Reinaldo, nesse caso, se eu usar somente a ultima parte, como condiçao, "ASCII" para verificar se ha Letras na posiçao '393', e não quiser verificar a data '130818' como condiçao, basta apenas eu apagar o "If mid"?

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Seg Mar 25, 2019 4:12 pm
por Reinaldo
Já não estou entendendo.
Para verificar se é letra deverá ser utilizado:

Esta linha separa o caractere da posição 393( midi(L,393,1), converte para maiúsculo UCase(...), e atribui valor ASCII Asc(...); a variavel xAsc recebe então esse valor.
xAsc = Asc(UCase(Mid(L, 393, 1)))

Esta linha verifica se o valor ASCII encontrado anteriormente está na range de letras
If xAsc > 64 And xAsc < 91 Then
Qual a real duvida/dificuldade então

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Ter Mar 26, 2019 7:55 am
por LuizFeijo
Reinaldo escreveu: Seg Mar 25, 2019 4:12 pm Já não estou entendendo.
Para verificar se é letra deverá ser utilizado:

Esta linha separa o caractere da posição 393( midi(L,393,1), converte para maiúsculo UCase(...), e atribui valor ASCII Asc(...); a variavel xAsc recebe então esse valor.
xAsc = Asc(UCase(Mid(L, 393, 1)))

Esta linha verifica se o valor ASCII encontrado anteriormente está na range de letras
If xAsc > 64 And xAsc < 91 Then
Qual a real duvida/dificuldade então
Ola sr Reinaldo, desculpa a falta de clareza, >>>'If Mid(L, 296, 6) = "130818" Then<<< esta parte funciona ou só é um comentario?

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Ter Mar 26, 2019 9:43 am
por Reinaldo
No Vba toda linha que inicia com apostrofe " ' " é considerada como comentário ou texto explicativo.
Essa linha está comentada ('), deixei como exemplo para mostrar como será a sintaxe caso deseje verificar uma string(texto) maior com um valor especifico

As duas linhas são apenas comentários, podem ser excluídas sem prejuízo da rotina
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then[/cote]

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO

Enviado: Ter Mar 26, 2019 10:04 am
por LuizFeijo
Reinaldo escreveu: Ter Mar 26, 2019 9:43 am No Vba toda linha que inicia com apostrofe " ' " é considerada como comentário ou texto explicativo.
Essa linha está comentada ('), deixei como exemplo para mostrar como será a sintaxe caso deseje verificar uma string(texto) maior com um valor especifico

As duas linhas são apenas comentários, podem ser excluídas sem prejuízo da rotina
'Verifica se o valor da string é o esperado
'If Mid(L, 296, 6) = "130818" Then[/cote]
Olá Sr Reinaldo, muito obrigado, foi o que pensei.
Duvida Resolvida!

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-

Enviado: Seg Jan 13, 2020 6:04 pm
por fao17
Boa tarde.

Aproveitando o tópico do colega, estou precisando de algo bem parecido.
No caso do tópico foi utilizado um if para verificar se na posição 393 do aqruivo é uma letra, caso sim a linha é copiada para a planilha.
No meu caso preciso verificar se na posição 296 é o número 130818.
No próprio código tem uma linha marcada como texto (If Mid(L, 296, 6) = "130818" Then) que poderia ser utilizado. Mas quando habilito ela e desabilito as linhas que não preciso (xAsc = Asc(UCase(Mid(L, 393, 1)))
'If xAsc > 64 And xAsc < 91 Then) os dados não vão para a planilha.
Alguém poderia esclarecer o que esta faltando?

Segue o código:

Do While Not EOF(I)

frmmenu.LBLSTATUS.Caption = "PROCESSANDO LINHA:" & LN - 1
DoEvents

Line Input #I, L
'Verifica se o valor da string é o esperado
If Mid(L, 296, 6) = "130818" Then

'Seleciona o caractere na posição 393 e verifia se e letra
' xAsc = Asc(UCase(Mid(L, 393, 1)))
'If xAsc > 64 And xAsc < 91 Then
W.Cells(LN, COL).Value = Mid$(L, PTI1, PTF1)
W.Cells(LN, COL + 1).Value = Mid$(L, PTI2, PTF2)
W.Cells(LN, COL + 2).Value = Mid$(L, PTI3, PTF3)
W.Cells(LN, COL + 3).Value = Mid$(L, PTI4, PTF4)
W.Cells(LN, COL + 4).Value = Mid$(L, PTI5, PTF5)
LN = LN + 1
End If
Loop
Close I
frmmenu.LBLSTATUS.Caption = "FORMATANDO DADOS"

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-

Enviado: Ter Jan 14, 2020 10:00 am
por Reinaldo
Apenas pelo trecho informado da rotina, aparentemente nada direciona ao que foi relatado: "...os dados não vão para a planilha..."
porem como são variáveis utilizadas/referenciadas no trecho "W / Ln / Col / PTI (2 a 5) / PTF (2 a 5)" pode ser algo + abrangente

Re: IMPORTAR TXT A PARTIR DE CERTA POSIÇÃO-RESOLVIDO-

Enviado: Ter Jan 14, 2020 4:56 pm
por fao17
Boa tarde Reinaldo.

O código, planilha e arquivo são os mesmos tópico inicial do colega LuizFeijo.
No código que vc criou a linha é importada para o Excel de acordo com a condição:
xAsc = Asc(UCase(Mid(L, 393, 1)))
If xAsc > 64 And xAsc < 91 Then

Gostaria de saber se é possível realizar a importação dessas linhas somente com a condição:
'If Mid(L, 296, 6) = "130818" Then

Obrigado pela atenção.