utilisation delims=; avec un champ vide (;;)

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
mondal
Batcheur occasionnel
Messages : 1
Enregistré le : 14 mars 2018 16:27

utilisation delims=; avec un champ vide (;;)

Message par mondal »

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
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

Re: utilisation delims=; avec un champ vide (;;)

Message par barnabe0057 »

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 :

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
:: ---------------------------
Tu as juste à renseigner la variable %BALTMP% au début.
Répondre