none
Alterar arquivo txt. RRS feed

  • Pergunta

  • Prezados,

    Preciso de um bat para alterar um arquivo.txt adicionando o numeral 0 e removendo um espaço posteriormente.

    Exemplo:

    51180200   032083911  6740593600017373402711000166280120209802286180     0000001,000000000001265,71010000012,0000000,000000000000000,000011337
    51180200   032084711  674059360001737340271100016628012020248R6          0000003,000000000000839,64110000004,0000005,000000000000041,980011337
    51180200   032085511  6740593600017373402711000166280120209678009580     0000001,000000000000959,33010000012,0000000,000000000000000,000011337
    51180200   032086411  6740593600017373402711000166280120209677326880     0000001,000000000000741,12010000012,0000000,000000000000000,000011337
    51180200   032087311  6740593600017373402711000166280120202307J4         0000003,000000000000060,15110000004,0000016,000000000000009,620011316

    As linhas começam no 51180200 e como é possível ver na parte grifada em negrito, a segunda linha vai apenas até a coluna 64, preciso identificar essas linhas que vão até a coluna 64 e adicionar o número 0 após a data e posteriormente remover um dos espaços depois do número, para manter a linha com o mesmo tamanho das demais, ficando assim:

    51180200   032084711  6740593600017373402711000166280120200248R6        0000003,000000000000839,64110000004,0000005,000000000000041,980011337

    Onde o 0 adicionado está sublinhado.

    O txt é diário e possuí 500 linhas para serem analisadas e corrigidas.

    Há como fazer via arquivo .bat automaticamente?

    Desde já agradeço.

    Att


    • Editado Rlctn quarta-feira, 29 de janeiro de 2020 19:05 erro
    quarta-feira, 29 de janeiro de 2020 19:04

Respostas

  • Veja se é isso:

    @echo off
    setlocal EnableDelayedExpansion
    
    ::Coloque aqui o caminho para o arquivo original:
    set Arquivo=%userprofile%\desktop\arquivo.txt
    if /i exist "%1" set "Arquivo=%1"
    
    for %%a in ("%Arquivo%") do set "Destino=%%~na_mod%%~xa"
    
    if /i exist %Destino% del %destino%
    
    for /f "usebackq delims=" %%a in ("%Arquivo%") do (
    set "Linha=%%a"
    if /i "!Linha:~63,1!"==" " (
    set Linha=!Linha:~0,58!0!Linha:~58,5!!Linha:~64!
    echo !Linha!>>%Destino%) else (echo !Linha!>>%Destino%)
    )

    51180200.bat

    ->Youtube<-


    R. Bohner


    • Editado Ricardo Bohner quinta-feira, 30 de janeiro de 2020 14:34
    • Marcado como Resposta Rlctn segunda-feira, 3 de fevereiro de 2020 19:41
    quinta-feira, 30 de janeiro de 2020 14:32

Todas as Respostas

  • Náo entendi direito essa parte de remover um espaço.

    Essas linhas que começam com 0000 na verdade ficam na mesma linha que a linha com 511...?

    51180200   032083911  6740593600017373402711000166280120209802286180     0000001,000000000001265,71010000012,0000000,000000000000000,000011337
    51180200   032084711  674059360001737340271100016628012020248R6          0000003,000000000000839,64110000004,0000005,000000000000041,980011337
    51180200   032085511  6740593600017373402711000166280120209678009580     0000001,000000000000959,33010000012,0000000,000000000000000,000011337
    51180200   032086411  6740593600017373402711000166280120209677326880     0000001,000000000000741,12010000012,0000000,000000000000000,000011337
    51180200   032087311  6740593600017373402711000166280120202307J4         0000003,000000000000060,15110000004,0000016,000000000000009,620011316

    Ou seria:

    51180200   032083911  6740593600017373402711000166280120209802286180
    0000001,000000000001265,71010000012,0000000,000000000000000,000011337
    51180200   032084711  674059360001737340271100016628012020248R6          
    0000003,000000000000839,64110000004,0000005,000000000000041,980011337
    51180200   032085511  6740593600017373402711000166280120209678009580
    0000001,000000000000959,33010000012,0000000,000000000000000,000011337
    51180200   032086411  6740593600017373402711000166280120209677326880
    0000001,000000000000741,12010000012,0000000,000000000000000,000011337
    51180200   032087311  6740593600017373402711000166280120202307J4
    0000003,000000000000060,15110000004,0000016,000000000000009,620011316


    R. Bohner


    quarta-feira, 29 de janeiro de 2020 23:56
  • Isso mesmo, as que começam com 000 ficam na mesma linha, conforme o seu primeiro quadro.

    Segue imagem da explicação, acho que dá para entender melhor

    imgur.com/14gkZFO

    Grato pela atenção.

    quinta-feira, 30 de janeiro de 2020 11:10
  • Veja se é isso:

    @echo off
    setlocal EnableDelayedExpansion
    
    ::Coloque aqui o caminho para o arquivo original:
    set Arquivo=%userprofile%\desktop\arquivo.txt
    if /i exist "%1" set "Arquivo=%1"
    
    for %%a in ("%Arquivo%") do set "Destino=%%~na_mod%%~xa"
    
    if /i exist %Destino% del %destino%
    
    for /f "usebackq delims=" %%a in ("%Arquivo%") do (
    set "Linha=%%a"
    if /i "!Linha:~63,1!"==" " (
    set Linha=!Linha:~0,58!0!Linha:~58,5!!Linha:~64!
    echo !Linha!>>%Destino%) else (echo !Linha!>>%Destino%)
    )

    51180200.bat

    ->Youtube<-


    R. Bohner


    • Editado Ricardo Bohner quinta-feira, 30 de janeiro de 2020 14:34
    • Marcado como Resposta Rlctn segunda-feira, 3 de fevereiro de 2020 19:41
    quinta-feira, 30 de janeiro de 2020 14:32
  • E ai amigo deu certo?

    R. Bohner

    segunda-feira, 3 de fevereiro de 2020 02:19
  • Boa tarde amigo....

    Salvou a vida!!!! Fiz em dois arquivos e deu tudo certo!!!

    Muito obrigado!!!!

    segunda-feira, 3 de fevereiro de 2020 19:40