Boucle sur plusieurs fichiers + extraction des données
extazz78
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je réalise un petit script pour mon client actuel afin de récupérer une valeur présente dans un fichier xml.
Les fichiers arrivent avec une partie variable (mais toujours nommée) et une partie fixe.
Le format type du fichier est <date>_<n° séquence>_<marque>_<marque>-<store>_Delivery.xml
Certains XML arrivent dans le même répertoire mais ils ne sont pas à analyser par mon script, je cherche donc uniquement un type bien précis de fichier et seulement ceux la.
Mon compteur fonctionne bien.
Mes fichiers sont bien trouvés et je retrouve bien la valeur "External Reference".
Seulement mon problème est le suivant ;
Lors de la génération du fichier CSV, je ne récupère que la valeur du premier fichier analysé et pas celle des autres fichiers.
De plus, la valeur est copiée en deux fois car la balise <externalreference> de mon xml est présente deux fois.
Aperçu de mon XML :
Comment faire pour que ma boucle analyse tout les fichiers et retranscrive toutes les valeurs externalreference de chaque fichiers, et ce sur une seule récurrence ?
Vous en remerciant par avance pour votre aide précieuse!
Amicalement,
Je réalise un petit script pour mon client actuel afin de récupérer une valeur présente dans un fichier xml.
Les fichiers arrivent avec une partie variable (mais toujours nommée) et une partie fixe.
Le format type du fichier est <date>_<n° séquence>_<marque>_<marque>-<store>_Delivery.xml
Certains XML arrivent dans le même répertoire mais ils ne sont pas à analyser par mon script, je cherche donc uniquement un type bien précis de fichier et seulement ceux la.
@echo off
color b
Echo Recuperation des References externes, veuillez patienter 5 secondes...
echo ---------------------------------------
rem Temps d'attente avant résultat
timeout /t 5 >nul
echo.
echo.
rem Compteur de fichiers traités
set /a nbFichiers=0
for %%a in (C:\Users\SC\Desktop\Scripts\local\*_*_*_*-*_Delivery.xml) do set /a nbFichiers+=1
echo %nbFichiers% fichiers ont ete analyses
echo -------------------------
echo.
rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--
for /f "delims=><" %%f in ('dir /b C:\Users\SC\Desktop\Scripts\local\*_*_*_*-*_Delivery.xml') do (
for /f "usebackq delims=;" %%z in ("C:\Users\SC\Desktop\Scripts\local\%%f") do (
for /f "delims=</externalReference> tokens=2" %%a in ('echo "%%z" ^| Findstr /r "<externalReference>"') do echo %%a >> Resultat_Final.csv
)
)
pause
Mon compteur fonctionne bien.
Mes fichiers sont bien trouvés et je retrouve bien la valeur "External Reference".
Seulement mon problème est le suivant ;
Lors de la génération du fichier CSV, je ne récupère que la valeur du premier fichier analysé et pas celle des autres fichiers.
De plus, la valeur est copiée en deux fois car la balise <externalreference> de mon xml est présente deux fois.
Aperçu de mon XML :
<?xml version="1.0" encoding="UTF-8"?>
<deliveryListType>
<values>
<nature>TDMR</nature>
<externalReference>00000999996760</externalReference>
<requestedPlace>
<nature>W</nature>
</requestedPlace>
<documentDate>2020-07-16T08:00:00</documentDate>
<actionDate>2020-07-16T08:00:00</actionDate>
<state>CREE</state>
<origin>
<nature>TDME</nature>
<externalReference>00000999996760</externalReference>
</origin>
Comment faire pour que ma boucle analyse tout les fichiers et retranscrive toutes les valeurs externalreference de chaque fichiers, et ce sur une seule récurrence ?
Vous en remerciant par avance pour votre aide précieuse!
Amicalement,
A voir également:
- Boucle sur plusieurs fichiers + extraction des données
- Fuite données maif - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Trier des données excel - Guide
- Fichiers epub - Guide
- Effacer les données de navigation sur android - Guide
2 réponses
Bonjour,
Voilà la deuxième partie du script :
Voilà la deuxième partie du script :
rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--
setlocal enableextensions enabledelayedexpansion
cd %USERPROFILE%\Desktop\Scripts\local
for %%A in (*_*_*_*-*_Delivery.xml) do (
set "reference="
for /f "tokens=2 delims=>< " %%B in ('findstr /r "externalReference" "%%~fA"') do (
if not defined reference (
set "reference=%%~B"
>> Resultat_Final.csv echo !reference: =!
)
)
)
pause
exit
Bonjour,
Merci pour ton aide mais ca ne fonctionne pas, aucun fichier ne se génère ? :(
Merci pour ton aide mais ca ne fonctionne pas, aucun fichier ne se génère ? :(
Bizarre chez moi aucun problème.
Pas grave on va contrôler le fonctionnement de chaque boucle FOR, qu'est-ce que tu obtiens avec ce code :
Tu devrais obtenir dans la console la liste des fichiers .xml à traiter.
Pas grave on va contrôler le fonctionnement de chaque boucle FOR, qu'est-ce que tu obtiens avec ce code :
rem Boucle qui extrait la valeur "external reference" et génère le resultat texte de CHAQUE FICHIERS nommés *_*_*_*-*_Delivery.xml dans un fichier csv--
setlocal enableextensions enabledelayedexpansion
cd %USERPROFILE%\Desktop\Scripts\local
for %%A in (*_*_*_*-*_Delivery.xml) do echo %%A
pause
exit
Tu devrais obtenir dans la console la liste des fichiers .xml à traiter.