IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Extraire des parties d'une chaîne et les stocker dans des variables [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2020
    Messages : 36
    Points : 19
    Points
    19
    Par défaut Extraire des parties d'une chaîne et les stocker dans des variables
    Bonjour à tous,

    Je cherche un moyen de stocker dans 2 variables le texte en gras au début (exemple : mil-year11) ainsi qu'au milieu (exemple : Bedford Academy Classrooms) dans les lignes suivantes :

    FLD=mil-year11,FLD=Bedford Academy Classrooms,FLD=Bedford Academy
    FLD=SWilson,FLD=Bedford Academy Teachers,FLD=Bedford Academy
    FLD=TNixon,FLD=Bedford Academy Headmaster,FLD=Bedford Academy
    FLD=lib-fd1,FLD=Bedford Academy Library,FLD=Bedford Academy
    ...
    FLD=obr-year12,FLD=Lakeview School Classrooms,FLD=Lakeview School
    FLD=UTeder,FLD=Lakeview School Teachers,FLD=Lakeview School
    FLD=ACooper,FLD=Lakeview School Headmaster,FLD=Lakeview School
    FLD=lib-cr2,FLD=Lakeview School Library,FLD=Lakeview School
    ...

    Ces textes sont constitués de caractères alpha-numériques et dans certains cas du tiret "-" et changent d'une ligne à l'autre.

    Pour faire simple, je souhaiterais arriver à ce résultat :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set parentfolder=mil-year11
    set subdir=Bedford Academy\Classrooms (avec rajout d'un antislash "\" juste avant le dernier mot, ici Classrooms)
    ...
    set parentfolder=ACooper
    set subdir=Lakeview School\Library (avec rajout d'un antislash "\" juste avant le dernier mot, ici Library)

    Existe-t-il un moyen pour y parvenir ?

    En vous remerciant pour votre aide précieuse.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    C'est assez simple à faire, le seul problème c'est comment différencier les lignes à traiter des lignes à ignorer.
    Tu n'as pas donné le ou les critères à prendre en compte donc pour le moment c'est impossible de t'aider.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2020
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    En fait, il y a toujours une seule ligne à traiter mais les textes en gras sont susceptibles de changer. J'ai mis plusieurs lignes pour l'exemple.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Il y a plusieurs façons de faire, par exemple :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=1,2 delims=," %%A in ('findstr "," liste.csv') do (
     
    	set "parentfolder=%%A"
    	set "parentfolder=!parentfolder:FLD=!"
    	set "parentfolder=!parentfolder:~1!"
     
    	set "subdir=%%B"
    	set "subdir=!subdir:FLD=!"
    	set "subdir=!subdir:~1!"
     
    	set "subdir=!subdir:Academy =Academy\!"
    	set "subdir=!subdir:School =School\!"
     
    	echo.!parentfolder! ##### !subdir!
     
    )
     
    echo. & pause
    exit

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2020
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    C'est ce que je cherchais, merci beaucoup !

    Juste un petit problème : je peux avoir une ligne qui ne contient ni Academy ni School, mais un autre mot à la place. N'existe-il pas un moyen de stocker le mot en question dans une variable et qu'elle soit ensuite interprétée dans la commande set "subdir=!subdir: xxx =xxx\!" ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Je rajoute une boucle FOR pour découper le nom de l'école en 3 mots distincts, puis je les réassemble en ajoutant \ entre le 2ème et le 3ème :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=1,2 delims=," %%A in ('findstr "," liste.csv') do (
     
    	set "parentfolder=%%A"
    	set "parentfolder=!parentfolder:FLD=!"
    	set "parentfolder=!parentfolder:~1!"
     
    	set "subdir=%%B"
    	set "subdir=!subdir:FLD=!"
    	set "subdir=!subdir:~1!"
     
    	for /f "tokens=1,2,*" %%E in ("!subdir!") do set "subdir=%%E %%F\%%G"
     
    	echo.!parentfolder! ##### !subdir!
     
    )
     
    echo. & pause
    exit

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2020
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Il peut aussi y avoir des écoles avec plus de 3 mots mais le \ est quoiqu'il arrive toujours avant le dernier mot. Comment gérer ce cas ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Voilà la solution :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=1,2 delims=," %%A in ('findstr "," liste.csv') do (
     
    	set "parentfolder=%%A"
    	set "parentfolder=!parentfolder:FLD=!"
    	set "parentfolder=!parentfolder:~1!"
     
    	set "subdir=%%B"
    	set "subdir=!subdir:FLD=!"
    	set "subdir=!subdir:~1!"
    	set "subdir=!subdir: =\!"
     
    	for %%E in ("!subdir!") do (
     
    		set "folder=!subdir:\%%~nE=!"
    		set "folder=!folder:\= !"
    		echo.!parentfolder! ##### !folder!\%%~nE
     
    	)
     
    )
     
    echo. & pause
    exit

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2020
    Messages : 36
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup !

    J'ai un autre "petit souci" : j'ai justement un dossier parent qui contient FLD dans son nom. Du coup, la commande set "parentfolder=!parentfolder:FLD=!" retire les lettres en question, donc le nom du dossier perd son nom original. Existe-t-il un moyen d'y remédier par un autre filtre ?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Le batch c'est comme de la magie, tout est possible

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=1,2 delims=," %%A in ('findstr "," liste.csv') do (
     
    	set "parentfolder=%%A"
    	set "parentfolder=!parentfolder:~4!"
     
    	set "subdir=%%B"
    	set "subdir=!subdir:~4!"
    	set "subdir=!subdir: =\!"
     
    	for %%E in ("!subdir!") do (
     
    		set "folder=!subdir:\%%~nE=!"
    		set "folder=!folder:\= !"
    		echo.!parentfolder! ##### !folder!\%%~nE
     
    	)
     
    )
     
    echo. & pause
    exit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Extraire plusieurs partie d'une chaîne de caractères.
    Par shishi666 dans le forum Langage
    Réponses: 6
    Dernier message: 24/04/2017, 07h53
  2. [Free Pascal] Stocker des sous-parties d'une chaîne : isoler les paramètres d'une commande
    Par eldoir dans le forum Free Pascal
    Réponses: 3
    Dernier message: 07/03/2012, 05h23
  3. [RegEx] Extraire certaines parties d'une chaîne
    Par snake264 dans le forum Langage
    Réponses: 2
    Dernier message: 02/04/2011, 13h52
  4. [XL-2003] extraire une partie d'une chaîne de caractère
    Par fllyann dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2010, 11h58
  5. Réponses: 2
    Dernier message: 03/04/2010, 22h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo