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 :

lecture en boucle de données linéaires,lit 1-2-4-7-11-16 [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Par défaut lecture en boucle de données linéaires,lit 1-2-4-7-11-16
    Bonjour,

    J'ai encore un petit problème avec mon script.

    pour rappel => (http://www.developpez.net/forums/d82...e/#post4751606)

    Je cherche à faire un script qui lit une ligne passée en argument par lot de 205 caractères, rempli des variables avec ces caractères, puis boucle sur les 205 caractères suivants.

    voici le code que j'utilise:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    ::@echo off
    setlocal EnableDelayedExpansion
    
    echo^=^>line.bat
    pause>nul
    
    set start=0
    set end=205
    
    set LINE=%1 
    set LINE=%LINE:&=E%
    
    set LINE=%LINE:~1,-2%
    
    :continue
    if "!LINE!" == "" (goto :fin_ligne)
    ::pause>nul
    
    set IDEN=%LINE:~0,1%
    
    ::if "%IDEN%"=="1" ( goto :suite ) else ( goto :boucle )
    
    :suite
    set NUMENR=%LINE:~1,8%
    echo numero d'enregistrement: %NUMENR%
    
    set REF=%LINE:~9,19%
    echo reference: %REF%
    
    ...
    
    set DATEOPEN=%LINE:~62,8%
    set day=%DATEOPEN:~0,2%
    set month=%DATEOPEN:~2,2%
    set year=%DATEOPEN:~4,4%
    
    set DATEOPEN=%day%/%month%/%year%
    echo date ouverture: %DATEOPEN%
    
    ...
    
    :boucle
    set /a start=%end%
    set /a end=%end%+205
    set LINE=!LINE:~%start%!
    goto :continue
    
    
    :fin_ligne
    ENDLOCAL
    set LINE=
    ::set start=0
    ::set end=206
    J'ai mis en commentaire les instructions de test, pour voir si le code donne les même erreurs l'orsqu'il doit tout afficher, et je constate la chose suivante:

    dans le fichier de résultat, j'obtiens le premier lot, le deuxième, le quatrième, le 7ième, le 11ième, le 16ième, ...
    en gros, il passe à chaque fois i=i+1 lignes entre deux lectures de lots.
    Pourquoi?

    Est-ce en rapport avec le fait que je fait appel à la même variable pour traiter la ligne?

    Merci d'avance de votre aide!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 26
    Par défaut
    Rebonjour,
    ce script ne me paret pas du tous clair.
    Comment fait ton pour utiliser la variable recuperer ds le document?

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Par défaut
    je vais rajouter moulte commentaires

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    ::@echo off
    setlocal EnableDelayedExpansion
    
    ::déclaration des variables plus initialisation
    ::début du lot de données
    set start=0
    ::fin du lot de données
    set end=205
    
    ::récupération de la variable dans LINE.
    ::Variable=ligne de donnée transmise lors de l'appel du script
    set LINE=%1 
    
    ::modification du caractère esperluette en E majuscule
    set LINE=%LINE:&=E%
    
    ::soustraction des guillemets transmis lors du passage de la variable par le précédent script
    set LINE=%LINE:~1,-2%
    
    ::début de la boucle
    :continue
    
    ::si la ligne est vide, passer à la fin du fichier
    if "!LINE!" == "" (goto :fin_ligne)
    
    
    ::récupération d'une première donnée: IDEN
    set IDEN=%LINE:~0,1%
    
    ::Test: si IDEN égale 1, récupérer le reste des données. Sinon, récupérer le prochain lot de données
    ::if "%IDEN%"=="1" ( goto :suite ) else ( goto :boucle )
    
    :suite
    set NUMENR=%LINE:~1,8%
    echo numero d'enregistrement: %NUMENR%
    
    set REF=%LINE:~9,19%
    echo reference: %REF%
    
    ...
    
    set DATEOPEN=%LINE:~62,8%
    set day=%DATEOPEN:~0,2%
    set month=%DATEOPEN:~2,2%
    set year=%DATEOPEN:~4,4%
    
    set DATEOPEN=%day%/%month%/%year%
    echo date ouverture: %DATEOPEN%
    
    ...
    
    ::après récupération des données, augmenter les limites du lot de 205
    :boucle
    set /a start=%end%
    set /a end=%end%+205
    
    ::récupérer la même ligne, mais à partir du 205ième caractères jusqu'à la fin
    set LINE=!LINE:~%start%!
    goto :continue
    
    
    ::fin de la ligne, fin de la boucle, fin du monde
    :fin_ligne
    ENDLOCAL
    set LINE=
    ::set start=0
    ::set end=206

  4. #4
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Bonjour,

    Ton erreur viens de là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set /a start=%end%
    set /a end=%end%+205
    
    set LINE=!LINE:~%start%!
    Avec LINE=[1..205][206..410][411..615][616..820]
    La premiere fois tu mets start = 205 et tu transformes ta ligne qui devient [206..410][411..615][616..820].
    La seconde fois tu mets start = 410 et tu transformes non pas ta ligne initiale, mais la ligne modifiée et tu obtiens donc [616..820].

    Il suffit simplement que tu remplaces LINE=!LINE:~%start%! par LINE=!LINE:~205!

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Par défaut
    rhaaa!! damned! j'ai voulu trop compliquer le bazar!

    Un grand merci pour ton aide! maintenant cela tourne impeccablement!


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

Discussions similaires

  1. Lecture en boucle de la base de donnée avec JS, AJAX
    Par Romaiiiiiin dans le forum Django
    Réponses: 11
    Dernier message: 09/04/2015, 21h45
  2. Problème de lecture en boucle
    Par masseur dans le forum Flash
    Réponses: 3
    Dernier message: 17/10/2006, 15h14
  3. [C#] Probléme de lecture de base de données
    Par nutball dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/09/2006, 16h48
  4. lecture en boucle sous firefox
    Par ptichat dans le forum Flash
    Réponses: 4
    Dernier message: 19/06/2006, 10h34
  5. Sauvegarde / Lecture de base de donnée
    Par Goold dans le forum Access
    Réponses: 14
    Dernier message: 18/06/2006, 09h15

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