1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| @echo off
setlocal enabledelayedexpansion
set source=input.txt
set sortie=output.txt
set "spaces= "
set /A cle_unique=1000
(
echo Mon titre
call :traite_cle_unique
echo !cle_unique_out! TITRE LIBRE
call :traite_cle_unique
echo !cle_unique_out! TYPEC
for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /V /C:" "`) do (
call :traite "%%~a" "%%~a"
echo !line_out!
)
for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /C:" "`) do (
call :traite "%%~a" "%%~a" "%%~b"
echo !line_out!
)
call :traite_cle_unique
echo !cle_unique_out! TYPED
for /f "usebackq tokens=1,2 delims= " %%a in (`type "%~dp0%source%" ^| findstr /C:" "`) do (
call :traite "%%~b" "%%~a" "%%~b"
echo !line_out!
)
)>"%~dp0%sortie%"
goto fin
:traite_cle_unique
REM Clé unique
set cle_unique_out=0000000000000000%cle_unique%
set cle_unique_out=%cle_unique_out:~-16%
set /A cle_unique+=1
REM Retour à l'envoyeur
goto :eof
:traite
REM Récupère les valeurs
set titre=%~1
set val1=%~2
set val2=%~3
call :traite_cle_unique
REM Titre
if defined val2 (
set "titre_out=X001LISTE %titre%%spaces%"
) else (
set "titre_out=Z001LISTE %titre%%spaces%"
)
set titre_out=%titre_out:~,28%
REM Longueur de valeur 1
set "val1_out=!val1!%spaces%"
set val1_out=%val1_out:~,52%
REM Longueur de valeur 2
if defined val2 (
set "val2_out=!val2!%spaces%"
set val2_out=!val2_out:~,52!
) else (
set "val2_out=%spaces%"
)
REM Crée la ligne de sortie
set line_out=!cle_unique_out!!titre_out!!val1_out!!val2_out!
REM Supprime les espaces en trop, à la fin de la ligne de sortie
for /l %%a in (1,1,150) do if "!line_out:~-1!"==" " set line_out=!line_out:~0,-1!
REM Retour à l'envoyeur
goto :eof
:fin
pause |