Lote: mesclar dois arquivos, mas em uma ordem específica

1

Deixe-me começar por mencionar que sou novo nessa programação em arquivos em lote. Dito isso, gostaria de mesclar dois arquivos e comecei com o seguinte código:

copy Test1.sol + Test2.sol Test.sol /B

Este código simplesmente coloca o conteúdo de Test2.sol na parte inferior do Test1.sol, que não é o que eu quero fazer. Em vez disso, gostaria de colocar o conteúdo de Test2.sol em um local específico em Test1.sol.

Para deixar mais claro. Digamos que o conteúdo do Test2.sol seja:

401 TEXT1  12345       123444
401 TEXT2  12345       123444
401 TEXT3  12345       123444

E o conteúdo do Test1.sol é:

**********************
**     HEADER 1     **
**********************

Message1
Message2

**********************
**     HEADER 2     **
**********************

**********************
**     HEADER 3     **
**********************

Message3
Message4

Como posso colocar o conteúdo de Test1.sol no HEADER 2 em Test2.sol - como as outras mensagens?

Obrigado de antemão!

    
por EMS 28.12.2016 / 13:50

2 respostas

0

Sua melhor aposta é quebrar os arquivos.

Se você não quiser desmembrá-lo, precisará de muitos ecos como este

@echo off
@echo ********************** >results.txt
@echo **     HEADER 1     ** >>results.txt
@echo ********************** >>results.txt
type value1.txt >>results.txt

h1.txt

**********************
**     HEADER 1     **
**********************

Mensagem1

Message2

h2.txt

**********************
**     HEADER 2     **
**********************

h3.txt

**********************
**     HEADER 3     **
**********************

Message3

Message4

type h1.txt >results.txt
type value1.txt >>results.txt
type h2.txt >results.txt
type value2.txt >>results.txt
type h3.txt >results.txt
type value3.txt >>results.txt

Obviamente, você pode acrescentar quantas seções quiser. O único truque restante é separar a lista original em arquivos individuais.

Não está claro o que acontece em cada cabeçalho, mas mostrarei um exemplo.

find "401 " values.txt >values1.txt
find "402 " values.txt >values2.txt
find "403 " values.txt >values3.txt

Isso poderia funcionar.

    
por 28.12.2016 / 14:58
1

Existe uma solução de "one-liner" simples com JREPL.BAT - uma linha de comando de expressão regular / substitua o utilitário de processamento de texto . O JREPL.BAT é um script puro (lote / JScript híbrido) que é executado nativamente em qualquer máquina Windows do XP em diante - nenhum arquivo exe de terceiros é necessário. A documentação completa está disponível na linha de comando via jrepl /? ou jrepl /?? para ajuda paginada.

jrepl "^" "stdin.readAll()+'\r\n'" /j /inc "/^\*\*     HEADER 2     \*\*$//+3" /f test1.sol /o test.sol <test2.sol

Explicação de como funciona, trabalhando de trás para frente (mais ou menos):

  • /f test1.sol Especifica o arquivo de entrada principal.
  • /o test.sol Especifica o arquivo de saída a ser criado.
  • <test2.sol Fornece o 2º arquivo como entrada no stdin.
  • /inc "/...//+3" Especifica que a localização / substituição deve ocorrer apenas na terceira linha após o primeira linha "Cabeçalho 2". O texto entre as barras é uma expressão regular.
  • /j Especifica que o argumento replace deve ser interpretado como JScript.
  • "^" O argumento find é uma expressão regular que corresponde ao início de uma linha.
  • "stdin..." O argumento replace é uma expressão JScript que avalia todo o conteúdo de stdin (o segundo arquivo), além de um terminador de linha extra.
por 28.12.2016 / 16:27