Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Emerson Sandro

Desmembramento de Arquivo

Recommended Posts

Olá gente , tenho esse sequeinte problema: Tenho um arquivo txt que tenho que importar pra dentro de uma tabela. para depois imprimir um comprovante não fiscal vinculado na impressora fiscal. a intrucao de ajuda que tenho é o layout do arquivo pela empresa que diz que : o caracter “@” indica o início de uma nova linha, a linha pode ter no máximo 40 caracteres, o arquivo trabalhado deve ser impresso em um comprovante não fiscal vinculado na impressora fiscal

 

Um exemplo do arquivo:

 

DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90519231037 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 84 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520548 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 99 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520599344 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 100 @

 

 

O problema é que não tem um padrao de limitacao do campo, na linha 2 e 4 o numero da autorizacao teve 3 numeros a mais, ou o numero do cupom fiscal pode ter uma qtde de numeros diferentes, se tivesse um padrão eu colocava o simbolo do @ como demitador de campo ou usava o código abaixo que adaptei para um outro arquivo txt. Teria como adaptar esse codigo abaixo pra tetnar importar os dados do arquivo acima????w

Function vdk_final()
On Error GoTo TrataErro
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Linha As String
	Open "C:\SANCOL\resposta\teste.txt" For Input As #1 ' Abre o arquivo a ser importado
	Set db = CurrentDb
	Set rs = db.OpenRecordset("vdk_final")
	While Not EOF(1)
		Line Input #1, Linha ' Lê uma linha do arquivo texto
				If Mid$(Linha, 7, 2) = "ok" Then
			With rs
				.AddNew
				!Seq = left$(Linha, 4)
				!resp = Mid$(Linha, 7, 2)
				!aut = Mid$(Linha, 56, 12)
				.Update
			End With
		Else
		End If
	Wend
saida:
	Close
	Set rs = Nothing
	Set db = Nothing
	Exit Function
TrataErro:
	MsgBox Err.Description, vbExclamation + vbOKOnly, "Erro: " & CStr(Err.Number)
#If DESENV Then	 ' Compilação condicional - Em desenvolvimento
	Stop
	Resume
#End If
	Resume saida
End Function
Na espera....

 

Emerson

Compartilhar este post


Link para o post
Compartilhar em outros sites

DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90519231037 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 84 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520548 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 99 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520599344 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 100 @

Acho que você mesmo ja deu a resposta.

Usar o @ como limitador.

Dim Linha as String

	While Not EOF(1)
		Line Input #1, Linha ' Lê uma linha do arquivo texto
		Linha = Mid(Linha,InStr(Linha," "),Len(Linha)) 'Retira a palavra DEMONSTRATIVO
		Nome = Mid(Linha,0,InStr(Linha,"@")) 'Deve retornar o primeiro "teste"

		Linha = Trim(Mid(Linha,InStr(Linha,"@"),Len(Linha))) 'retira tudo antes do No. Autorização
		Numero_Autorizacao = Mid(Linha,InStr(Linha,": "),InStr(Linha," @")) 'resgata o No. Autorização

	Wend

Você a palavra antes do primeiro @ deve ser um nome ai, não é ? (então você pega do inicio da string até a posição do primeiro @)

Depois retira tudo isso. E faz Parecido com o próximo.

 

 

Ve o que você consegue por ai.

Se precisar de help grita!

Compartilhar este post


Link para o post
Compartilhar em outros sites

sorpio

 

juro que tentei enteder tudo que você escreveu mais não entendir nadinha...

Esplica ai como funciona a funcao instr, tendo com respostas esse campos, usei como exemplo apenas a primeira primeira linha

 

campo1= Demonstrativo teste

campo 2= No. autorizacao: 90520483

campo3= Convenio: Treinamento teste

campo4 = Loja: 33431859000000

campo5 = Cupom Fiscal: 91

 

Obrigado pela ajuda memso assim

 

Emerson

 

DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90519231037 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 84 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520548 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 99 @

DEMONSTRATIVO teste@ @No.Autorizacao: 90520599344 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 100 @

Acho que você mesmo ja deu a resposta.

Usar o @ como limitador.

Dim Linha as String

	While Not EOF(1)
		Line Input #1, Linha ' Lê uma linha do arquivo texto
		Linha = Mid(Linha,InStr(Linha," "),Len(Linha)) 'Retira a palavra DEMONSTRATIVO
		Nome = Mid(Linha,0,InStr(Linha,"@")) 'Deve retornar o primeiro "teste"

		Linha = Trim(Mid(Linha,InStr(Linha,"@"),Len(Linha))) 'retira tudo antes do No. Autorização
		Numero_Autorizacao = Mid(Linha,InStr(Linha,": "),InStr(Linha," @")) 'resgata o No. Autorização

	Wend

Você a palavra antes do primeiro @ deve ser um nome ai, não é ? (então você pega do inicio da string até a posição do primeiro @)

Depois retira tudo isso. E faz Parecido com o próximo.

 

 

Ve o que você consegue por ai.

Se precisar de help grita!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O InStr vai pegar a posição do caracter/palavra.

 

'Aqui linha = "DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Linha = Mid(Linha,InStr(Linha," "),Len(Linha)) 'Retira a palavra DEMONSTRATIVO
'Aqui linha = "teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Nome = Mid(Linha,0,InStr(Linha,"@")) 'Deve retornar o primeiro "teste"
'Nome = "teste"
		Linha = Trim(Mid(Linha,InStr(Linha,"@"),Len(Linha))) 'retira tudo antes do No. Autorização
'Aqui linha = " @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Numero_Autorizacao = Mid(Linha,InStr(Linha,": "),InStr(Linha," @")) 'resgata o No. Autorização
'Numero_autorizacao = 90520483

 

É um pouco complicado para explicar, juntando com o sono fica pior ainda. Mas veja se consegue entender. Se continuar com duvida amanha eu vejo uma maneira de explicar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com todo respeito Scorpio, mais vou dormir pensando em você.. rsrsr... me falta bagagem pra enteder o codigo...

 

Abracos e uma boa noite de sono, assim sua mente amanha tá fresquinha...

 

Emerson

 

 

O InStr vai pegar a posição do caracter/palavra.

 

'Aqui linha = "DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Linha = Mid(Linha,InStr(Linha," "),Len(Linha)) 'Retira a palavra DEMONSTRATIVO
'Aqui linha = "teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Nome = Mid(Linha,0,InStr(Linha,"@")) 'Deve retornar o primeiro "teste"
'Nome = "teste"
		Linha = Trim(Mid(Linha,InStr(Linha,"@"),Len(Linha))) 'retira tudo antes do No. Autorização
'Aqui linha = " @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @"
		Numero_Autorizacao = Mid(Linha,InStr(Linha,": "),InStr(Linha," @")) 'resgata o No. Autorização
'Numero_autorizacao = 90520483

 

É um pouco complicado para explicar, juntando com o sono fica pior ainda. Mas veja se consegue entender. Se continuar com duvida amanha eu vejo uma maneira de explicar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, tem um jeito mais fácil.

 

 

Utilize a função Split.

Ela retorna um vetor, de acordo com o separador que você passar.

Dim x() as integer

X = Split("1,2,3,4,5",",")

 

X(0) vai ser 1

X(1) vai ser 2

X(2) vai ser 3

X(3) vai ser 4

X(4) vai ser 5

 

Entendeu?

 

Dim DEMO() as String
Dim str as String
str = "DEMONSTRATIVO teste@ @No.Autorizacao: 90520483 @Convenio: TREINAMENTO teste@Loja: 33431859000000 @Cupom Fiscal: 91 @" 
DEMO = Split(str,"@")

MsgBox DEMO(2) ' = No.Autorizacao: 90520483

Dai, você só quebra, por exemplo a posição 2 para pegar o numero da autorização.

 

Do outro jeito tava muito complicado... http://forum.imasters.com.br/public/style_emoticons/default/sick.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.