Bonjour
j'ai un décalage dans mes tokens si ma ligne contient des champs vides (;;) ou non.
En clair si pas de champs vides les champs 11 et 14 ne correspondent pas aux mêmes champs que lorsque il y a des champs vides dans ma ligne.
for /f %%A in (%BALTMP%\listeGRDON2_encours) do (
for /f "eol= tokens=11,14 delims=;" %%i in (%BALTMP%\%%A) do (
move %BALTMP%\%%~nA.csv %BALTMP%\%%i_%%j_%%~nA.csv
)
merci de votre aide
utilisation delims=; avec un champ vide (;;)
Modérateur : WIN32-[GG]
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: utilisation delims=; avec un champ vide (;;)
Bonjour,
J'ai rajouté une fonction pour re-écrire les lignes des fichiers .csv, pas besoin de s'inquiéter ça ne modifie pas les fichiers originaux.
Cela devrait fonctionner :
Tu as juste à renseigner la variable %BALTMP% au début.
J'ai rajouté une fonction pour re-écrire les lignes des fichiers .csv, pas besoin de s'inquiéter ça ne modifie pas les fichiers originaux.
Cela devrait fonctionner :
Code : Tout sélectionner
@echo off
Mode con cols=80 lines=25
Title mondal
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul
:: ---------------------------
:: debut du programme
:: ---------------------------
set BALTMP=le chemin et nom du dossier
cd /d %BALTMP% || exit /b 1
for /f %%Z in (listeGRDON2_encours) do (
echo * > "tempo.txt"
for /f "eol=* tokens=*" %%A in ('type "%%~Z"') do (
set "ligne=%%A"
(echo !ligne! | find ";;") && (call :reecriture)
echo !ligne! >> tempo.txt
)
cls
for /f "eol=* tokens=11,14 delims=;" %%A in ('type "tempo.txt"') do (
move "%BALTMP%\%%~nZ.csv" "%BALTMP%\%%~A_%%~B_%%~nZ.csv"
)
)
del /f /q "tempo.txt"
exit /b 0
:: ---------------------------
:: fin du programme
:: ---------------------------
:: ---------------------------
:: debut de la fonction
:: ---------------------------
:reecriture
set ligne=!ligne:;;=;###;!
(echo !ligne! | find ";;") && (goto :reecriture)
goto :eof
:: ---------------------------
:: fin de la fonction
:: ---------------------------