Problème pour extraire des informations d'un fichier
Résolu
Ka-El
Messages postés
260
Date d'inscription
Statut
Membre
Dernière intervention
-
Ka-El Messages postés 260 Date d'inscription Statut Membre Dernière intervention -
Ka-El Messages postés 260 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dispose d'un fichier "catalogue.txt" qui contient un certain nombre de champs et des sauts de ligne.
Mon objectif est de soustraire certaines informations que je vais ensuite concaténer dans un autre fichier.
Pour bien comprendre, voici une partie du format de mon fichier:

Comme vous pouvez le constater, il y a des blancs devant chaque ligne.
Il s'agit donc pour moi de récupérer l'information qui se trouve devant RPART et SPART (qu'on retrouve plusieurs fois dans le fichier) et envoyer les informations dans un autre fichier.
je devrais donc obtenir un résultat comme ça:
Pour l'instant, j'arrive à récupérer certaines données avec ce code:
Mais le résultat ne me donne que la ligne suivante:
Auriez-vous svp des idées qui pourraient m'aider à avancer ?
Merci à vous ! :-)
Je dispose d'un fichier "catalogue.txt" qui contient un certain nombre de champs et des sauts de ligne.
Mon objectif est de soustraire certaines informations que je vais ensuite concaténer dans un autre fichier.
Pour bien comprendre, voici une partie du format de mon fichier:
Comme vous pouvez le constater, il y a des blancs devant chaque ligne.
Il s'agit donc pour moi de récupérer l'information qui se trouve devant RPART et SPART (qu'on retrouve plusieurs fois dans le fichier) et envoyer les informations dans un autre fichier.
je devrais donc obtenir un résultat comme ça:
BRIAN;JENNY
BOB;SAM
FRED;CAROLE
Pour l'instant, j'arrive à récupérer certaines données avec ce code:
@REM Collecte des informations
for /F %%a in ('dir /B catalogue.txt') do (
for /F "tokens=5 delims== " %%b in ('find "RPART" ^< %%a') do set RECV=%%b
for /F "tokens=5 delims== " %%c in ('find "SPART" ^< %%a') do set SEND=%%c
echo !RECV!;!SEND!>> %ctrlcft%
)
Mais le résultat ne me donne que la ligne suivante:
FRED;CAROLE
Auriez-vous svp des idées qui pourraient m'aider à avancer ?
Merci à vous ! :-)
A voir également:
- Problème pour extraire des informations d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Extraire une video youtube - Guide
2 réponses
Bonjour,
Essaie comme ceci :
Attention à ces 2 lignes :
set IDA=!IDA: =!
set IDA=!IDA: =!
Dans la première ligne il s'agit d'un espace entre les : et le =
Dans la deuxième ligne il s'agit d'une tabulation entre les : et le =
Le forum a supprimé la tabulation.
Essaie comme ceci :
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 28591 >nul
color 0A
set catalogue=%USERPROFILE%\Desktop\catalogue.txt
set "people="
set ctrlcft=%USERPROFILE%\Desktop\resultat.txt
echo.> %ctrlcft%
for /f "usebackq tokens=2-3 delims== " %%B in ("%catalogue%") do (
set IDA=%%~B
set IDA=!IDA: =!
set IDA=!IDA: =!
if "!IDA!"=="SPART" (set people=%%~C)
if "!IDA!"=="RPART" (
set people=!people!;%%~C
echo !people!>> %ctrlcft%
set "people="
)
)
pause
exit
Attention à ces 2 lignes :
set IDA=!IDA: =!
set IDA=!IDA: =!
Dans la première ligne il s'agit d'un espace entre les : et le =
Dans la deuxième ligne il s'agit d'une tabulation entre les : et le =
Le forum a supprimé la tabulation.
Est-ce que c'est mieux comme ça :
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 28591 >nul
color 0A
set catalogue=%USERPROFILE%\Desktop\catalogue.txt
set ctrlcft=%USERPROFILE%\Desktop\resultat.txt
set "chaine="
echo.>%ctrlcft%
for /f "usebackq tokens=1,2,* delims==" %%A in ("%catalogue%") do (
echo %%A = %%B %%C
echo %%A | findstr /C:" IDTU" >nul && (if defined chaine (call :envoi))
echo %%A | findstr /C:" IDTU" /C:" PHASESTEP" /C:" IDF" /C:" SPART" /C:" RPART" >nul && (set "chaine=!chaine!^;%%B")
echo %%A | findstr /C:"TYPE" | findstr /V "Protocol Filter" >nul && (set "chaine=!chaine!^;%%B")
echo %%B | findstr /C:" DATED" /C:" DATEE" >nul && (set "chaine=!chaine!^;%%C")
echo %%B | findstr /C:" TIMED" /C:" TIMEE" >nul && (set "chaine=!chaine!^;%%C" & if "!chaine:~-1!"=="0" (set "chaine=!chaine:~,-2!") else (set "chaine=!chaine:~,-3!"))
)
call :envoi
pause
exit
:envoi
set "chaine=!chaine: =!" # on supprime les espaces
set "chaine=!chaine: =!" # on supprime les tabulations
set "chaine=!chaine:~1!" # on supprime le premier point-virgule
echo.!chaine!;>>%ctrlcft% & echo.>>%ctrlcft% & set "chaine="
goto :eof
Par contre, si je veux ajouter un autre élément de recherche dans le script (par exemple l'information qui se trouve devant "DATED =", comment devrais-je procéder ?
Du coup, je suppose que la partie du code devrait prendre cette forme:
J'ai tenté quelques trucs, mais ça ne marche pas...
En tout cas, merci beaucoup pour ton aide précieuse ! :-)
Ceci dit, le script n'abouti pas. Je pense que le problème vient de la boucle qui va chercher les informations toujours sur la même position (tokens tokens=1-2 delims== ")
Je continue à chercher de mon côté...
Fichier dispo en mp
Merci pour ton aide ! :-)