none
Copiar parte de arquivo texto RRS feed

  • Pergunta

  • Tenho um aquivo que contem as linhas abaixo, na realidade, possui em torno de 30 mil linhas, tenho que gerar todos os meses, é um trabalho manual muito cansativo e demorado, então pensei como poderia fazer para automatizar este processo, sendo que eu preciso apenas das linhas que se referem os registros como "CF". O que de fato eu preciso seria mais ou menos assim : 

    1.Identificar a linha que contem "CF";
    2."PEGAR" o numero da chave na linha e copiar todas as linhas que se referem a ela para um novo arquivo.
     
    Conforme exemplos abaixo:

    Arquivo_ENTRADA.txt
    1,1,695203,5116,0,"ECF","27/06/2016","27/06/2016","1",80810,2109,5102,"S","V",0,"CF","V","9"
    7,1,695203,1,13723.57,0
    2,1,695203,1,7.00,0,19690.08,1378.19
    2,1,695203,1,12.00,0,8161.58,979.3
    1,1,695204,5116,0,"ECF","27/06/2016","27/06/2016","1",80810,2109,5102,"S","V",0,"NF","V","9"
    7,1,695204,1,13723
    2,1,695204,1,7.00,0,19690
    2,1,695204,1,12.00


    Arquivo_SAIDA.txt
    1,1,695203,5116,0,"ECF","27/06/2016","27/06/2016","1",80810,2109,5102,"S","V",0,"CF","V","9"
    7,1,695203,1,13723.57,0
    2,1,695203,1,7.00,0,19690.08,1378.19
    2,1,695203,1,12.00,0,8161.58,979.3


    Agradeço pela ajuda, 

    Att,


    Clansman

    domingo, 3 de julho de 2016 02:18

Respostas

Todas as Respostas

  • Consegui reproduzir sua necessidade apenas usando a pesquisa e o recurso de macro do NotePad++.

    Acho que até em 100  mil linhas contendo "ECF" teria um desempenho satisfatório.

    Se precisar de ajuda, tento te explicar como fiz.

    quinta-feira, 7 de julho de 2016 19:27
  • Desculpa amigo, eu entendi, porem, teria um padrão de como essa linha começa e termina?

    No exemplo que passou acima, as linhas começam no numero 695203? e por exemplo, a primeira linha, termina no 9"?

    Os dados da linha 2 e 3 fazem parte da linha 1? pois na linha não contem "CF".

    Me passa melhor o perfil do arquivo por favor.

    Obrigado.

    sexta-feira, 8 de julho de 2016 11:46
  • No momento e postar quebrou automaticamente as linhas, comecam geralmente com 1, ou 2, ou 4, ou 5, ou 7, ou 9, a linha 1 termina em 9" (quebrou para proxima linha) em outro forum eu consegui uma ajuda satisfatoria, mas surgiu uma outra necessidade e que nao consigo resolver. A solução encontrada é esta : 

    @echo off
    for /f "tokens=3, 16 delims=," %%a in (Arquivo_ENTRADA.txt) do (
    call :processar %%a %%b
    )
    echo Terminou
    pause
    exit
    :processar
    set chave=%1
    set seilaoqehisso=%2
    echo %seilaoqehisso% | find "CF"
    if "%errorlevel%"=="0" goto terminar
    goto:Eof
    :terminar
    for /f %%a in (Arquivo_ENTRADA.txt) do (
    echo %%a | find "%chave%" >> Arquivo_SAIDA.txt
    )


    Eentretando surgiu a necessidade de inserir as linhas que iniciam com 9,1, que estao no fim do arquivo, e nao estou conseguindo fazer isso, o arquivo original tem este formato :

    1,1,698266,5125,0,"ECF","06/07/2016","06/07/2016","1",80810,2109,5102,"S","V",0,"CF","V","9"
    7,1,698266,1,28396.25,0
    2,1,698266,1,7.00,0,42137.93,2949.71
    2,1,698266,1,12.00,0,14701.77,1764.11
    2,1,698266,1,17.00,0,33253.28,5653.16
    2,1,698266,1,25.00,0,660.46,165.05
    2,1,698266,4,7.6000,0,33163.62,0
    2,1,698266,5,1.6500,0,33163.62,0
    1,1,698265,5125,0,"ECF","06/07/2016","06/07/2016","1",80810,2109,5405,"S","V",0,"CF","V","9"
    7,1,698265,1,0,120118.08
    2,1,698265,4,7.6000,0,70051.66,0
    2,1,698265,5,1.6500,0,70051.66,0
    7,1,697895,1,53.6,0
    2,1,697895,4,0.0000,0,0,0
    2,1,697895,5,0.0000,0,0,0
    1,1,697932,1273011,0,"16","06/07/2016","01/07/2016","30129",10011,1296,2102,"E","C",0,"NF","P"
    2,1,697932,1,12.00,0,428.4,51.4
    2,1,697932,4,7.6000,0,228.05,0
    2,1,697932,5,1.6500,0,228.05,0
    1,1,697931,1273011,0,"16","06/07/2016","01/07/2016","30129",10011,1296,2403,"E","C",0,"NF","P"
    7,1,697931,1,0,3540.4
    2,1,697931,4,0.0000,0,0,0
    2,1,697931,5,0.0000,0,0,0
    2,1,697931,6,0.00,0,4198.67,307.05
    1,1,697927,1383152,0,"2","06/07/2016","06/07/2016","102014",83453,1110,1102,"E","C",0,"NF","P"
    7,1,697927,1,0,275.29
    2,1,697927,1,12.00,0,660.71,112.32
    2,1,697927,4,0.0000,0,0,0
    2,1,697927,5,0.0000,0,0,0
    1,1,697928,1383153,0,"2","06/07/2016","06/07/2016","102014",83453,1296,1403,"E","C",0,"NF","P"
    7,1,697928,1,0,687.84
    2,1,697928,4,7.6000,0,687.84,0
    2,1,697928,5,1.6500,0,687.84,0
    9,1,"06/07/2016",5125,38,430308,430751,1657,1,2,17716477.34,17738569.92,36.63,10557.89,2573.79,0,15.34,17862.52,442,7,4564.47,319.51,12,1504.41,180.52,17,2789.01,474.13,25,51.04,12.76,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000000341"
    9,1,"06/07/2016",5125,39,429906,430074,1653,0,1,16133482.28,16142513.42,50.8,4775.21,786.87,0,0,8282.2,167,7,1592.48,111.47,12,553.78,66.45,17,1264.01,214.88,25,7.99,1.99,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000000322"
    9,1,"06/07/2016",5125,40,593739,593985,1372,2,1,8089396.81,8093134.66,42.33,1926.84,338.19,0,2.4,4039.78,245,7,546.93,38.28,12,154.22,18.5,17,726.94,123.57,25,0,0,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000000142"
    9,1,"06/07/2016",5125,41,466720,467108,1543,2,1,13859383.77,13872913.31,207.79,6306.25,1797.67,0,0,10451.02,387,7,2644.95,185.14,12,890.06,106.8,17,1657.84,281.83,25,24.98,6.24,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000000202"
    9,1,"06/07/2016",5125,42,408526,408766,1391,0,1,18066259.43,18076994.51,56.45,5353.83,1450.63,0,9.48,8929.1,239,7,1838.55,128.69,12,671.61,80.59,17,1322.56,224.83,25,31.97,7.99,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000001287"
    9,1,"06/07/2016",5125,43,404699,404988,1382,2,1,17566127.52,17581629.53,119.44,7824.37,1654.23,0,29.68,14401.34,288,7,2529.25,177.04,12,633.92,76.07,17,2632.2,447.47,25,78.92,19.73,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091120000000000364"
    9,1,"06/07/2016",5125,44,295048,295250,1304,1,1,11864545.79,11872016.19,62.16,3561.11,1107.89,0,39.75,6097.5,201,7,1218.37,85.28,12,423.22,50.78,17,1051.31,178.72,25,6.59,1.64,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091220000000002459"
    9,1,"06/07/2016",5125,45,189204,189418,695,5,8,7953395.83,7964926.46,170.19,5668.43,1333.84,0,14.34,9098.92,213,7,2236.96,156.58,12,602.64,72.31,17,1481.26,251.81,25,22.97,5.74,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091220000000002470"
    9,1,"06/07/2016",5125,46,232852,233058,906,0,4,10151073.66,10163663.47,627.06,6084.01,1502.17,0,3.48,10056.68,205,7,1956.63,136.96,12,727.92,87.35,17,1688.54,287.05,25,0,0,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091220000000002625"
    9,1,"06/07/2016",5125,47,270363,270663,912,1,2,9521683.79,9536321.12,17.28,7502.86,1678.14,0,0,12781.82,299,7,2607.4,182.51,12,1156.05,138.72,17,1661.62,282.47,25,13.98,3.49,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"EP091220000000004338"
    

    Até tentei incrementar o batch usando a linha abaixo, mas "ele" só copia o campo 3 que é a data "06/07/2016" e nao teve jeito de fazer copiar toda a linha. 

    for /f "tokens=3 delims=," %%a in (Arquivo_ENTRADA.txt) do do echo %%a | find "/2016" >> Arquivo_SAIDA.txt

    Toda ajuda é bem vinda. 

    Obrigado. 

     

    Clansman

    sábado, 9 de julho de 2016 18:01
  • Consegui reproduzir sua necessidade apenas usando a pesquisa e o recurso de macro do NotePad++.

    Acho que até em 100  mil linhas contendo "ECF" teria um desempenho satisfatório.

    Se precisar de ajuda, tento te explicar como fiz.

    Tentei usando esta ferramenta e nao obtive exito, poderia explicar como fizeste ? qual versao do notepadd++ utiliza ? 

    Obrigado.


    Clansman

    sábado, 9 de julho de 2016 18:04
  • Let me show you how to be mind-blowing!

    • Marcado como Resposta Clansman segunda-feira, 11 de julho de 2016 16:38
    sábado, 9 de julho de 2016 20:32
  • Olá. Alguém já disponibilizou um código. Acho que seria mais prático com ele. Mas caso ainda tenha interesse é só falar. Sucesso!
    segunda-feira, 11 de julho de 2016 13:05
  • Ainda busco a solução, estou escrevendo o codigo postado em imagem pelo 4HorsemenOfDaIT para testar o funcionamento como um todo. Aviso assim que concluir. 

    Clansman

    segunda-feira, 11 de julho de 2016 14:11
  • AMAZING !!!

    Grande 4HorsemenOfDaIT Funcionou certinho resolveu "meu problema" mas confesso que mesmo digitando, nao entendi de onde busca as linhas com 9,1 poderia me explicar ? E, desde já um muito obrigado pela ajuda !!!! 

    Forte abraço !


    Clansman

    segunda-feira, 11 de julho de 2016 16:41
  • Também gostaria de entender o código. Ficou insano! :)
    segunda-feira, 11 de julho de 2016 17:22
  • A linha 4 do código procura a string "CF", extrai das linhas onde localizou esta string o número após a segunda virgula e então procura novamente no arquivo todas as linhas que possuem este número.

    A linha 5 procura todas as linhas que contenham uma string que combine com a expressão N,N,"DD/MM/YYYY". Não importa se é 9,1,"10/07/2016", 1,2,"10/07/2016" ou 1032,231,"10/07/2016", desde de que o inicio da linha obedeça esta expressão.

    segunda-feira, 11 de julho de 2016 20:13
  • A linha 4 do código procura a string "CF", extrai das linhas onde localizou esta string o número após a segunda virgula e então procura novamente no arquivo todas as linhas que possuem este número.

    A linha 5 procura todas as linhas que contenham uma string que combine com a expressão N,N,"DD/MM/YYYY". Não importa se é 9,1,"10/07/2016", 1,2,"10/07/2016" ou 1032,231,"10/07/2016", desde de que o inicio da linha obedeça esta expressão.

    Show de bola, se quiser deixar para procurar apenas 9,1,"DD/MM/YYYY" Teria como ? Não que seja necessario neste momento, até por que funcionou direitinho, fiz uma pequena alteração, incluindo a linha  

    	[void][System.Console]::ReadKey($true)

    Por que nao estava aparecendo as mensagens, tipo executava convertia o arquivo e nao aparecia nada em tela. 

    Falou !!! 


    Clansman

    terça-feira, 12 de julho de 2016 13:04
  • Sim. Altere '(\d+)\,(\d+)\,.(\d{2}\/\d{2}\/\d{4})' para '9,1\,.(\d{2}\/\d{2}\/\d{4})'.
    terça-feira, 12 de julho de 2016 13:20