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 :

for et %%a substr


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Par défaut for et %%a substr
    Bonjour à tous,
    j'ai cherché un peu partout un réponse à mon problème ... sans succès.
    Alors je me décide à poster ma question.
    Je suis totalement novice sur le développement batch donc merci d'excuser mes questions sans doutes idiotes. Je suis donc à l'écoute de tous vos conseils.

    Donc voilà, j'ai un fichier texte de type fixe (sans séparateur) et sons contenu fonctionne par bloc de 3 lignes environ. La relation entre les lignes se fait par l'ordre de lecture, il n'existe pas de clef permettant de relier la ligne 1 à la 2 etc ...

    Mon objectif est donc de parser ce fichier pour rajouter dans la ligne 2 l'ID extrait de la ligne 1 et dans la ligne 3, l'ID extrait de la 2 etc par bloc de 3 lignes.

    Pour l'heure je bloque sur le point suivant : Récupérer la sous-chaine de l'ID de ma ligne 1 ....

    Ex fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ABYXF0001720121004JFKDG                    
    CD01JCDG20121002012100420121004 A772AAF0838
    EF1JFKCDG000400480000000000000FDDR554630000 
    ABATD0138622100454CGPRG
    CD01CDGP20121004200420120420004 FYA319A1558                                                            
    EF1CDRG000000000000000005100000005579001000
    ligne 1 commence par AB son ID est la concat des caractère 3à5 et 10à18
    ligne 2 commence par CD son ID est la concat des caractère 6à8 et 22à27
    ligne 3 commence par EF

    voilà mon début de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    set file=%1
    for /f "delims=" %%f in ('type %file% ^|findstr /b "AB"') do (
    	set row = %%f
            set row = %row:~3,3%%row:~10,9%
    	echo %row%
    )
    pour le moment je tente juste de récupérer l'ID de AB mais ...

    le second set row ne fonctionne pas du tout et je n'arrive pas à m'expliquer pourquoi ...

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de NorocBzh
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2008
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 834
    Par défaut
    Salut,

    Enlève les espaces entre quand tu fais tes "set" :
    De plus, si tu veux modifier une variable que tu définie dans la même boucle, il faut utiliser les enableextensions ou enabledelayedexpansion (je ne sais jamais lequel il faut, donc je mets les 2... (Des connaisseurs pourront nous préciser ça )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @Echo off & Setlocal enableextensions enabledelayedexpansion
    set file=D:\Temp\batchTest\fichier.txt
    for /f "delims=" %%f in ('type %file% ^|findstr /b "AB"') do (
    	set row=%%f
            set row=!row:~3,3!!row:~10,9!
    	echo ligne :!row!
    )

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Par défaut
    Un grand merci.
    Cela fonctionne à merveille

    J'avais effectivement testé avec les SetLocal mais dans mes tests je n'arrivais pas à voir de différence, les résultats étaient toujours erronés.
    Il semble que les "espaces" dans les Set jouent un rôle important, je n'aurai jamais trouvé

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Par défaut
    Bon et bien ca ma permis de passer une 1ière étape mais je dois vraiment pas être doué

    maintenant, j'essaye d'enchainer les éléments (en faisant attention à mes espaces ) mais ca bugg.

    Code : 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
    @Echo off
    setlocal enableextensions enabledelayedexpansion
    set file=%1
    for /f "delims=" %%f in ('type %file% ^|findstr /b "AB CD EF"') do (
        set row=%%f
        if "!row:~0,2!" == "AB" (
            set r1key=!row:~3,3!!row:~10,9!
            echo !row! >> !file!.rdy
        )
        if "!row:~0,2!" == "CD" (
            set r2key=!row:~12,6!
           echo !r1key!!row! >> !file!.rdy
        )
        if "!row:~0,2!" == "EF" (
            echo !r2key!!row! >> !file!.rdy
        )
    )
    Voilà la j'arrive au bout du script, m'enfin ... presque ... parceque ca marche pas.

    Pourtant promis, j'ai essayé de faire gaffe aux "espaces" et aux variable déjà utilisées.

    Merci encore de votre aide.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Par défaut
    OK c'est bon j'ai trouvé, voilà la dernière version qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Echo off
    setlocal enableextensions enabledelayedexpansion
    set file=%1
    for /f "delims=" %%f in ('type !file! ^|findstr /b "AB CD EF"') do (
        set row=%%f
        if "!row:~0,2!"=="AB" ( set abid=!row:~2,2!!row:~6,5!!row:~12,8!& echo !row! >> !file!.rdy )
        if "!row:~0,2!"=="CD" ( set cdid=!row:~45,10!& echo !abid!!row! >> !file!.rdy )
        if "!row:~0,2!"=="EF" ( echo !cdid!!row! >> !file!.rdy )
    )
    Je ne saurai dire si ce code est optimisé donc si vous avez des remarques sur l'utilisation de tel ou tel élément plutôt qu'un autre, je suis preneur.

    Sinon, en espérant que ce morceau de code pourra en aider d'autres.

    Merci encore pour le coup de main qui m'a bien débloqué sur le démarrage.

Discussions similaires

  1. [BATCH] Variable d'un for et substring
    Par mioux dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 17/02/2009, 13h48
  2. exctraction de substring dans un for
    Par labbyjoel dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 18/12/2008, 13h37
  3. [Turbo C++] Fonciton containing for are not expanded inline
    Par BuG dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 17/02/2003, 06h48
  4. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56
  5. Réponses: 2
    Dernier message: 10/07/2002, 11h51

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