Lot: fusionne deux fichiers mais dans un ordre spécifique

1

Permettez-moi de commencer par mentionner que je suis nouveau dans cette programmation en fichiers de commandes. Cela dit, je voudrais fusionner deux fichiers et j'ai commencé avec le code suivant:

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

Ce code place simplement le contenu de Test2.sol au bas de Test1.sol, ce qui n'est pas ce que je veux faire. Au lieu de cela, je voudrais mettre le contenu de Test2.sol à un endroit spécifique dans Test1.sol.

Pour le rendre plus clair. Disons que le contenu de Test2.sol est:

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

Et le contenu de Test1.sol est:

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

Message1
Message2

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

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

Message3
Message4

Comment puis-je mettre le contenu de Test1.sol sous HEADER 2 dans Test2.sol - comme les autres messages?

Merci d'avance!

EMS
la source
Je ne pense pas que les fichiers batch puissent le faire. VBScript peut le faire cependant
LPChip
Dang it. Peut-être que vous pouvez m'aider avec autre chose alors. Dois-je créer un nouveau fil à cet effet - ou puis-je vous demander ici?
EMS
si ce n'est pas lié, créez un nouveau poste.
LPChip
@LPChip Cela pourrait être fait avec un fichier batch, mais ce serait une solution unique et très compliquée - je ne suis pas prêt à passer autant de temps à l'écrire :)
DavidPostill
Malheureusement, je ne peux créer un nouveau fil que toutes les 40 minutes. Comme c'est un peu urgent, est-il possible que je puisse envoyer un message privé à partir de cette page d'accueil?
EMS

Réponses:

0

Votre meilleur pari est de casser les fichiers.

Si vous ne voulez pas le casser vous avez besoin de beaucoup d'échos comme celui-ci

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

h1.txt

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

Message1

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

De toute évidence, vous pouvez ajouter autant de sections que vous le souhaitez. La seule astuce qui reste consiste à séparer la liste originale en fichiers individuels.

Le contenu de chaque en-tête n'est pas clair, mais je vais donner un exemple.

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

Cela pourrait marcher.

cybernard
la source
Cela a fonctionné avec seulement trois divisions! Merci beaucoup!
EMS
1

Il existe une solution "simple" à une ligne avec JREPL.BAT - un utilitaire de traitement de texte de recherche / remplacement en ligne de commande d'expression régulière . JREPL.BAT est un script pur (batch hybride / JScript) qui s'exécute de manière native sur toute machine Windows à partir de XP - aucun fichier exe tiers n'est requis. Une documentation complète est disponible à partir de la ligne de commande via jrepl /?ou jrepl /??pour obtenir de l'aide paginée.

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

Explication de son fonctionnement en marche arrière (en quelque sorte):

  • /f test1.sol Spécifie le fichier d'entrée principal.
  • /o test.sol Spécifie le fichier de sortie à créer.
  • <test2.sol Fournit le deuxième fichier en entrée sur stdin.
  • /inc "/...//+3"Spécifie que la recherche / remplacement doit uniquement se produire sur la 3ème ligne après la
    première ligne "En-tête 2". Le texte entre les barres obliques est une expression régulière.
  • /j Spécifie que l'argument de remplacement doit être interprété en tant que JScript.
  • "^" L'argument de recherche est une expression régulière qui correspond au début d'une ligne.
  • "stdin..." L'argument de remplacement est une expression JScript qui évalue le contenu entier de stdin (le deuxième fichier), plus un terminateur de ligne supplémentaire.
Dbenham
la source