merge multiple text files, removing all headers and the new header will be changed as follows
Modérateur : WIN32-[GG]
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
Bonjour,
Je veux bien t'aider mais il me faudrait plusieurs fichiers pour faire des tests.
Je veux bien t'aider mais il me faudrait plusieurs fichiers pour faire des tests.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
J'ai déjà créé la première partie qui consiste à construire un nouveau header à partir de tous les fichiers textes :
Tu peux le nommer comme tu veux, par exemple yazidioubi.bat
Pour fonctionner mon script a besoin d'un autre script qui sert à additionner les grands nombres, le voici :
Tu devras le nommer ADD.bat
Les 2 scripts devront se trouver dans le même répertoire que les fichiers TXT à traiter.
Je te laisse la suite, ça ne devrait pas être très compliqué.
Code : Tout sélectionner
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
chcp 28591 >nul
: ----------------------------------------------------
: on teste la présence du fichier ADD.bat
: ----------------------------------------------------
if not exist "ADD.bat" (echo. & echo il manque le fichier ADD.bat ^^!^^!^^! & pause & exit)
: ----------------------------------------------------
: on traite tous les fichiers TXT
: ----------------------------------------------------
set nombre_de_lignes=0
set montant_total=0
for %%A in (*.txt) do (
for /f "usebackq skip=1 delims=" %%E in ("%%~A") do (
set /a nombre_de_lignes+=1
set "ligne=%%~E"
set amount=!ligne:~21,13!
call ADD.bat !montant_total! !amount!
set montant_total=!_ANSWER!
)
echo montant total : !montant_total! ##### lignes : !nombre_de_lignes! ##### "%%~A"
set "last=%%~A"
)
: --------------------------------------------------------------
: on corrige le nombre de lignes en rajoutant des zéros
: --------------------------------------------------------------
set nombre_de_lignes=000000!nombre_de_lignes!
set nombre_de_lignes=!nombre_de_lignes:~-7!
: --------------------------------------------------------------
: on récupère le header du dernier fichier texte
: --------------------------------------------------------------
set count=0
for /f "usebackq delims=" %%K in ("!last!") do (
set /a count+=1
if !count! EQU 1 (set "first=%%~K")
)
: --------------------------------------------------------------
: on récupère la première et la dernière partie du header
: --------------------------------------------------------------
set unchangeable=!first:~0,21!
set "restant=!first:~41!"
: --------------------------------------------------------------
: on construit le nouveau header
: --------------------------------------------------------------
set header=!unchangeable!!montant_total!!nombre_de_lignes!!restant!
echo. & echo Header ==^>^> !header!
: --------------------------------------------------------------
: fin du script
: --------------------------------------------------------------
echo. & pause
exit
Pour fonctionner mon script a besoin d'un autre script qui sert à additionner les grands nombres, le voici :
Code : Tout sélectionner
@ECHO OFF
::SETLOCAL ENABLEEXTENSIONS
::SETLOCAL ENABLEDELAYEDEXPANSION
SET _FIRST=%1
SET _SECOND=%2
CALL :ADD _FIRST _SECOND _ANSWER
::ECHO !_ANSWER!
::ENDLOCAL
::ENDLOCAL
GOTO :END
:ADD
::ADD NUMBERS LARGER THAN 32-BITS
::SYNTAX: CALL ADD _VAR1 _VAR2 _VAR3
::VER 1.2
::hieyeque1@gmail.com - drop me a note telling me
::if this has helped you. Sometimes I don't know if anyone uses my stuff
::Its free for the world to use.
::I retain the rights to it though, you may not copyright this
::to prevent others from using it, you may however copyright works
::as a whole that use this code.
::Just don't try to stop others from using this through some legal means.
::CopyRight Brian Williams 8/29/2009
:: _VAR1 = VARIABLE FIRST NUMBER TO ADD
:: _VAR2 = VARIABLE SECOND NUMBER TO ADD
:: _VAR3 = VARIABLE NUMBER RETURNED
SET _RESULT=
SETLOCAL
SET _NUM1=!%1!
SET _NUM2=!%2!
IF NOT DEFINED _NUM1 SET _NUM1=0
IF NOT DEFINED _NUM2 SET _NUM2=0
FOR /L %%A IN (1,1,2) DO (
FOR /L %%B IN (0,1,9) DO (
SET _NUM%%A=!_NUM%%A:%%B=%%B !
)
)
FOR %%A IN (%_NUM1%) DO SET /A _NUM1CNT+=1 & SET _!_NUM1CNT!_NUM1=%%A
FOR %%A IN (%_NUM2%) DO SET /A _NUM2CNT+=1 & SET _!_NUM2CNT!_NUM2=%%A
SET _NUM1=%_NUM1: =%
SET _NUM2=%_NUM2: =%
SET /A _DIGITS=%_NUM1CNT% + %_NUM2CNT%
IF %_DIGITS% LEQ 8 (
SET /A _RESULT=%_NUM1% + %_NUM2%
)
IF DEFINED _RESULT (ENDLOCAL & SET %3=%_RESULT%& GOTO :EOF)
IF %_NUM1CNT% GEQ %_NUM2CNT% (SET _MAXOPS=%_NUM1CNT%) ELSE (SET _MAXOPS=%_NUM2CNT%)
SET /A _MAXOPS=%_MAXOPS% - 1
IF %_NUM1CNT% GTR %_NUM2CNT% (
SET /A _ZEROS=%_NUM1CNT% - %_NUM2CNT%
FOR /L %%A IN (1,1,!_ZEROS!) DO SET _ZERO=!_ZERO!0
SET _NUM2=!_ZERO!!_NUM2!
)
IF %_NUM2CNT% GTR %_NUM1CNT% (
SET /A _ZEROS=%_NUM2CNT% - %_NUM1CNT%
FOR /L %%A IN (1,1,!_ZEROS!) DO SET _ZERO=!_ZERO!0
SET _NUM1=!_ZERO!!_NUM1!
)
FOR /L %%A IN (!_MAXOPS!,-1,0) DO (
SET /A _TMP=!_NUM1:~%%A,1! + !_NUM2:~%%A,1! !_PLUS! !_CO!
SET _CO=
SET _PLUS=
IF !_TMP! GTR 9 SET _CO=!_TMP:~0,1!& SET _TMP=!_TMP:~-1!& SET _PLUS=+
SET _RETURN=!_TMP!!_RETURN!
SET _TMP=
)
IF DEFINED _CO SET _RETURN=%_CO%%_RETURN%
SET _RESULT=%_RETURN%
IF DEFINED _RESULT (ENDLOCAL&SET %3=%_RESULT%)
GOTO :EOF
:END
Les 2 scripts devront se trouver dans le même répertoire que les fichiers TXT à traiter.
Je te laisse la suite, ça ne devrait pas être très compliqué.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
Ok je vais t'aider pour la suite.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
Voilà la totalité du script :
Le nouveau fichier texte s'appelle ALL_IN_ONE_CCP.txt
Est-ce que tu dois supprimer tous les anciens fichiers ?
Code : Tout sélectionner
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
chcp 28591 >nul
set resultat=ALL_IN_ONE_CCP.txt
: ----------------------------------------------------
: on teste la présence du fichier ADD.bat
: ----------------------------------------------------
if not exist "ADD.bat" (echo. & echo il manque le fichier ADD.bat ^^!^^!^^! & pause & exit)
: ----------------------------------------------------
: on traite tous les fichiers TXT
: ----------------------------------------------------
set nombre_de_lignes=0
set montant_total=0
for /f "delims=" %%A in ('2^>nul dir /b /a-d "*.txt" ^| findstr /v "%resultat%"') do (
for /f "usebackq skip=1 delims=" %%E in ("%%~A") do (
set /a nombre_de_lignes+=1
set "ligne=%%~E"
set amount=!ligne:~21,13!
call ADD.bat !montant_total! !amount!
set montant_total=!_ANSWER!
)
echo ##### Traitement de "%%~A" en cours ...
set "last=%%~A"
)
: --------------------------------------------------------------
: on corrige le nombre de lignes en rajoutant des zéros
: --------------------------------------------------------------
set nombre_de_lignes=000000!nombre_de_lignes!
set nombre_de_lignes=!nombre_de_lignes:~-7!
: --------------------------------------------------------------
: on récupère le header du dernier fichier texte
: --------------------------------------------------------------
set count=0
for /f "usebackq delims=" %%K in ("!last!") do (
set /a count+=1
if !count! EQU 1 (set "first=%%~K")
)
: --------------------------------------------------------------
: on récupère la première et la dernière partie du header
: --------------------------------------------------------------
set unchangeable=!first:~0,21!
set "restant=!first:~41!"
: --------------------------------------------------------------
: on construit le nouveau header
: --------------------------------------------------------------
set header=!unchangeable!!montant_total!!nombre_de_lignes!!restant!
: --------------------------------------------------------------
: on construit un nouveau fichier avec toutes les lignes
: --------------------------------------------------------------
echo !header! > %resultat%
for /f "delims=" %%A in ('2^>nul dir /b /a-d "*.txt" ^| findstr /v "%resultat%"') do (
for /f "usebackq skip=1 delims=" %%E in ("%%~A") do echo %%E >> %resultat%
)
: --------------------------------------------------------------
: fin du script
: --------------------------------------------------------------
pause
exit
Est-ce que tu dois supprimer tous les anciens fichiers ?
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
J'aimerais bien t'aider mais je ne vois pas de quoi tu parles.
Est-ce que tu parles des espaces entre les noms et le chiffre 0 ou 1 à droite de chaque ligne ?
Est-ce que tu parles des espaces entre les noms et le chiffre 0 ou 1 à droite de chaque ligne ?
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: merge multiple text files, removing all headers and the new header will be changed as follows
Voilà c'est corrigé :
Code : Tout sélectionner
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
chcp 28591 >nul
set resultat=ALL_IN_ONE_CCP.txt
: ----------------------------------------------------
: on teste la présence du fichier ADD.bat
: ----------------------------------------------------
if not exist "ADD.bat" (echo. & echo il manque le fichier ADD.bat ^^!^^!^^! & pause & exit)
: ----------------------------------------------------
: on traite tous les fichiers TXT
: ----------------------------------------------------
set nombre_de_lignes=0
set montant_total=0
for /f "delims=" %%A in ('2^>nul dir /b /a-d "*.txt" ^| findstr /v "%resultat%"') do (
for /f "usebackq skip=1 delims=" %%E in ("%%~A") do (
set /a nombre_de_lignes+=1
set "ligne=%%~E"
set amount=!ligne:~21,13!
call ADD.bat !montant_total! !amount!
set montant_total=!_ANSWER!
)
echo ##### Traitement de "%%~A" en cours ...
set "last=%%~A"
)
: --------------------------------------------------------------
: on corrige le nombre de lignes en rajoutant des zéros
: --------------------------------------------------------------
set nombre_de_lignes=000000!nombre_de_lignes!
set nombre_de_lignes=!nombre_de_lignes:~-7!
: --------------------------------------------------------------
: on récupère le header du dernier fichier texte
: --------------------------------------------------------------
set count=0
for /f "usebackq delims=" %%K in ("!last!") do (
set /a count+=1
if !count! EQU 1 (set "first=%%~K")
)
: --------------------------------------------------------------
: on récupère la première et la dernière partie du header
: --------------------------------------------------------------
set unchangeable=!first:~0,21!
set "restant=!first:~41!"
: --------------------------------------------------------------
: on construit le nouveau header
: --------------------------------------------------------------
set header=!unchangeable!!montant_total!!nombre_de_lignes!!restant!
: --------------------------------------------------------------
: on construit un nouveau fichier avec toutes les lignes
: --------------------------------------------------------------
echo !header!> %resultat%
for /f "delims=" %%A in ('2^>nul dir /b /a-d "*.txt" ^| findstr /v "%resultat%"') do (
for /f "usebackq skip=1 delims=" %%E in ("%%~A") do echo %%E>> %resultat%
)
: --------------------------------------------------------------
: fin du script
: --------------------------------------------------------------
echo. & pause
exit