Notifications
Clear all

Copiar Linha de Arquivo TXT que inicie com um valor específi

8 Posts
3 Usuários
0 Reactions
836 Visualizações
(@lstoduto)
Posts: 0
New Member
Topic starter
 

Boa tarde pessoal,

Sou novo no fórum e também estou iniciando nas macros, então não tenho muito conhecimento de programação..
Pois bem, estou tentando criar um código que faça a leitura de um arquivo txt e copie desse arquivo somente as linhas que iniciarem com um determinado valor. No meu caso eu trabalho com contabilidade e usaria esse código pois diversos arquivos txt's que tenho ultrapassam o limite de linhas do excel, logo eu não consigo importar o arquivo inteiro no excel e extrair somente as linhas que necessito.

Alguém de vocês conseguiria me ajudar com esse código? Já procurei por todos os lugares, mas realmente não consegui encontrar nada para essa situação..

Agradeço pela ajuda, grande abraço

 
Postado : 04/03/2016 12:19 pm
(@mprudencio)
Posts: 0
New Member
 

Vc possui arquivos txt com mais de 1048576 linhas???? :o :o :o :o :o :o :o

E isso mesmo?

 
Postado : 04/03/2016 1:25 pm
(@lstoduto)
Posts: 0
New Member
Topic starter
 

Pior que sim amigo, uma das declarações que empresas de grande porte entrega é a ECD (escrituração contabil digital) ja trabalhei com arquivos que ultrapassaram 12 milhoes de linhas.. ai acabei tendo que quebrar o txt em diversas planilhas, e como normalmente são só alguns registros que preciso alterar, se eu conseguisse extrair somente esses registros seria mt mais simples..

Conhece alguma forma de fazer isso?

 
Postado : 06/03/2016 8:19 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

a rotina abaixo, disponibilizada no grupo ExcelBr, permite algo +/- próximo ao que deseja porem deve ser adaptada a realidade de seus arquivos/modelos

Public Sub LeArquivoTexto()
Dim Texto As String
Dim L As Long        'linha de gravação
Dim Cont As Integer  'conta colunas/grupo
Dim Compr As Integer 'comprimento do texto a ser extraido

' Por: JLM em Set/2014
' A cada três linhas no arquivo texto, corresponde a uma linha no excel.
' o arquivo texto possui tabulação e Tags

'abre o arquivo texto para leitura.

Open "C:Seu Caminhoimportacao.txt" For Input As #1
L = 2:  Cont = 1

'loop para percorrer todas as linhas do arquivo texto
Do While Not EOF(1)
	Line Input #1, Texto 'lê uma linha
	Cont = Cont + 1
'como o texto de exemplo possui tabulações:
'Clean - remove caracteres não imprimíveis.
'LTrim remove espaços a esquerda.
	Texto = WorksheetFunction.Clean(LTrim(Texto))
'determina o Comprimento do texto a ser extraido.
	Compr = InStr(2, Texto, "<") - 1 - InStr(1, Texto, ">")
'converte os 4 1ºs caracteres para maiúsculo.
'como não sei se a tag pode estar em minúscula/maiúscula,
'converto tudo para maiúsculo para facilitar a comparação.
'poderia converter para minúsculo e comparar com minúsculo.
	Select Case UCase(Left(Texto, 4))
		Case "<COD" ' col A
			Cells(L, 1).Value = Mid(Texto, 6, Compr)
		Case "<DES" ' col B
			Cells(L, 2).Value = Mid(Texto, 7, Compr)
		Case "<COR" ' col C
			Cells(L, 3).Value = Mid(Texto, 6, Compr)
		Case Else
			Cont = Cont - 1
	End Select
	If Cont > 3 Then
		L = L + 1
		Cont = 1
	End If
Loop
Close #1 'fecha o arquivo texto
End Sub
 
Postado : 06/03/2016 8:48 am
(@lstoduto)
Posts: 0
New Member
Topic starter
 

Reinaldo,

Muito obrigado pela ajuda.. não quero explorar tua boa vontade mas passei praticamente a tarde toda tentando ajustar o código, abaixo colei um exemplo dos arquivos que eu trabalho, se não for te tomar tempo e puder me ajudar a ajustar o código te agradeceria muito.. Todos os arquivos que trabalho o criterio que eu teria de usar seriam os 4 primeiros caracteries que sempre vão estar entre barras ( | ), por exemplo, conseguiria me ajudar a ajustar o codigo para que ele copie somente as linhas que iniciam com "|C100|" ?, ele pode copiar com ou sem as barras, se for possível com as barras seria perfeito..

|C100|0|1|008964391000176|01|00|1|296||03012012|05012012|4095,38|1|
|C170|1|50000499|SERVICOS DE ENGENHARIA CLINICA AT - EXTERNA|1,000|HS|4095,38|0,00|0|041|2933||0,00|0,00|0,00|0,00|0,00|0,00|0|49||0,00|0,00|0,00|98|
|C100|0|1|003610664000160|01|00|1|551||29122011|06012012|426,84|1|0,00|0,00|426,84|9|0,00|0,00
|C170|1|50000499|SERVICOS DE ENGENHARIA CLINICA ATEXTERNA|1,000|UN|426,84|0,00|0|041|2933||0,00|
|C100|0|1|006914398000158|01|00|1|7318||06012012|09012012|146,00|
|C170|1|10000263|ALCOOLATILICOABSOLUTO|50,000|L|146,00|0,00|0|000

abraço, obrigado novamente..

 
Postado : 06/03/2016 4:13 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi o que realmente deseja copiar, mas se for a linha toda que inicie por |C100| utilize:

Public Sub LeArquivoTexto()
Dim Texto As String
Dim L As Long        'linha de gravação

'abre o arquivo texto para leitura.
'altere para caminhonome onde seu arquivo está
Open "D:ReinaldoDownloadsTeste.txt" For Input As #1
L = 2:  Cont = 1

'loop para percorrer todas as linhas do arquivo texto
Do While Not EOF(1)
   Line Input #1, Texto 'lê uma linha
   Cont = Cont + 1
    'como o texto de exemplo possui tabulações:
    'Clean - remove caracteres não imprimíveis.
    'LTrim remove espaços a esquerda.
    Texto = WorksheetFunction.Clean(LTrim(Texto))
'
'Caso deseje copiar a linha inteira
   Select Case Left(Texto, 6)
      Case "|C100|" ' col A
         Cells(L, 1).Value = Texto 'Mid(Texto, 6, Compr)
      L = L + 1
   End Select
Loop
Close #1 'fecha o arquivo texto
End Sub
 
Postado : 07/03/2016 7:02 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não entendi o que realmente deseja copiar, mas se for a linha toda que inicie por |C100| utilize:

Public Sub LeArquivoTexto()
Dim Texto As String
Dim L As Long        'linha de gravação

'abre o arquivo texto para leitura.
'altere para caminhonome onde seu arquivo está
Open "D:ReinaldoDownloadsTeste.txt" For Input As #1
L = 2:  Cont = 1

'loop para percorrer todas as linhas do arquivo texto
Do While Not EOF(1)
   Line Input #1, Texto 'lê uma linha
   Cont = Cont + 1
    'como o texto de exemplo possui tabulações:
    'Clean - remove caracteres não imprimíveis.
    'LTrim remove espaços a esquerda.
    Texto = WorksheetFunction.Clean(LTrim(Texto))
'
'Caso deseje copiar a linha inteira
   Select Case Left(Texto, 6)
      Case "|C100|" ' col A
         Cells(L, 1).Value = Texto
      L = L + 1
   End Select
Loop
Close #1 'fecha o arquivo texto
End Sub
 
Postado : 07/03/2016 7:02 am
(@lstoduto)
Posts: 0
New Member
Topic starter
 

Reinaldo,

Sem palavras amigo, era exatamente isso que eu precisava fazer, muito obrigado mesmo.. não tem idéia de como isso me ajuda no dia-a-dia.. fico te devendo muito, se precisar de qualquer coisa só falar, sei que nessa parte de programação não vou poder ajudar, mas ligado a contabilidade, e a parte tributária, se precisar só perguntar.

abraço!

 
Postado : 07/03/2016 6:11 pm