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

VBScript Discussion :

Récupérer le chiffre max d'une variable dans un fichier


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Récupérer le chiffre max d'une variable dans un fichier
    Bonjour,

    Je fais face à un souci, j'ai un fichier scenery.cfg qui ressemble à ceci :

    [Area.001]
    Title=Default Terrain
    Texture_ID=1
    Local=Scenery\World
    Layer=1
    Active=TRUE
    Required=TRUE

    [Area.002]
    Title=Default Scenery
    Local=Scenery\BASE
    Layer=2
    Active=TRUE
    Required=TRUE

    [Area.003]
    Title=0000 Base
    Local=Scenery\0000
    Layer=3
    Active=TRUE
    Required=FALSE

    ...
    ...
    Etc

    Ce que je souhaite c'est récupérer en VBS le chiffre MAX de la dernière section [Area.xxx] du fichier scenery.cfg, je n'y arrive pas tout seul, même avec des centaines de recherches sur google je suis bloqué.
    Par exemple si il y a [Area.100] [Area.88] [Area.002] [Area.121] [Area.052] le chiffre le plus élevé de [Area.xxx] dans mon exemple est 121, c'est donc ce chiffe dont j'ai besoin.

    Je dois faire la même chose avec Layer=xxx

    Y a t-il une bonne âme pour me venir aide ? Je vous remercies par avance.

    Erik

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Bonjour, bonjour !

    C'est pourtant de niveau débutant et il ne s'agit pas d'une variable !

    Poster déjà le code entrepris et préciser la difficulté rencontrée, quel point technique précis …


    ______________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je vous confirme que je suis débutant de chez débutant, ceci explique pourquoi je poste un message sur ce forum.

    A l'heure actuelle j'ai seulement un code (trouvé sur google) qui me permet de compter le nombre de fois que Area.xxx apparaît dans le fichier scenery.cfg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Const ForReading = 1
    Set fso = CreateObject( "Scripting.FileSystemObject" )
    Set textFile = fso.OpenTextFile( "Scenery.cfg", ForReading )
    contents = textFile.ReadAll
    textFile.Close
    Set rgxp = New Regexp
    rgxp.Pattern = "Area."
    rgxp.IgnoreCase = True
    rgxp.Global = True
    Set matches = rgxp.Execute( contents )
    Wscript.Echo "Number of Area : " & matches.Count
    Malheureusement, cela ne correspond à ce que je cherche, en effet, Area.xxx peux avoir différente valeur numérique qui ne se suivent pas, Area.120 Area.142 Area.56, ce script me retourne 3 au lieu de 142.

    Merci pour vos lanternes,

    Erik

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Joindre le fichier texte source pourrait aider aussi …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    mmm ça sent le cheating bot

    une solution précuite - mais on peut résoudre ton problème avec des patterns différents

    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
    Const ForReading = 1
    Set fso = CreateObject( "Scripting.FileSystemObject" )
    Set textFile = fso.OpenTextFile( "Scenery.cfg", ForReading )
    contents = textFile.ReadAll
    textFile.Close
    Set rgxp = New Regexp
    rgxp.Pattern = "Area.(\d+)"
    rgxp.IgnoreCase = True
    rgxp.Global = True
    Set matches = rgxp.Execute(contents)
    iBufNum=0
    For Each match in matches   ' Itère la collection Matches.
    If match.SubMatches(0) > iBufNum Then iBufNum = match.SubMatches(0)
    Next
    wscript.echo iBufNum
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Re-bonjour,

    la solution de omen999 fonctionne parfaitement merci beaucoup ! Ce code (plus fiable que mon code en batch actuel) me sera nécessaire dans le cadre de l'ajout d'une scène dans FSX via un programme d'installation automatique.

    Je marque le sujet comme étant résolu,

    Merci à tous,

    Erik

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Re-re-bonjour,

    Je rencontre encore une petite difficulté, le code fonctionne a merveille pour Aera.xxx, cependant, si je remplace " Aera.xx " par " Layer= " tel que dans le code suivant :

    rgxp.Pattern = "Layer=(\d+)"

    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
    Const ForReading = 1
    Set fso = CreateObject( "Scripting.FileSystemObject" )
    Set textFile = fso.OpenTextFile( "Scenery.cfg", ForReading )
    contents = textFile.ReadAll
    textFile.Close
    Set rgxp = New Regexp
    rgxp.Pattern = "Layer=(\d+)"
    rgxp.IgnoreCase = True
    rgxp.Global = True
    Set matches = rgxp.Execute(contents)
    iBufNum=0
    For Each match in matches   ' Itère la collection Matches.
    If match.SubMatches(0) > iBufNum Then iBufNum = match.SubMatches(0)
    Next
    wscript.echo iBufNum
    Le script me retourne 99 et jamais plus, alors que la valeur maximum de Layer est 120, je suppose qu'il doit y avoir un changement a faire au niveau du Regex pour l'adapter à Layer... ?

    Pour rappel voici le contenu du fichier Scenery.cfg :

    [Area.001]
    Title=Default Terrain
    Texture_ID=1
    Local=Scenery\World
    Layer=1
    Active=TRUE
    Required=TRUE

    [Area.002]
    Title=Default Scenery
    Local=Scenery\BASE
    Layer=2
    Active=TRUE
    Required=TRUE

    [Area.003]
    Title=0000 Base
    Local=Scenery\0000
    Layer=3
    Active=TRUE
    Required=FALSE
    ...
    etc


    Merci pour votre aide, car je patauge.

    Erik

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 176
    Points
    17 176
    Par défaut
    Salut

    Remplacer la ligne 13 par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cint(match.SubMatches(0)) > iBufNum Then iBufNum = Cint(match.SubMatches(0))
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Merci mille fois "ProgElecT",

    C'était effectivement la solution, une simple fonction de conversion de donnée... J'ai passé la nuit à chercher une solution dans le Regex pour rien, mais au moins j'ai appris des choses en regex ces dernières 24h...

    Encore merci.

    Erik

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    surtout que mon code était un bel exemple de ce qui arrive
    lorsqu'on néglige les effets du transtypage implicite de vbscript...
    (comparaison chaine/numérique ou chaine/chaine)

    il ne fonctionne avec Area que dans la mesure où la valeur numérique
    est formatée sur trois chiffres avec d'éventuels zéros non significatifs

    heureusement ProgElecT a rectifié tout ça
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

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

Discussions similaires

  1. Récupérer une variable dans un fichier par rapport à l'emplacement d'une autre
    Par FlorianBreizh dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 10/12/2012, 11h05
  2. Réponses: 2
    Dernier message: 26/01/2012, 16h24
  3. Récupérer une variable dans un fichier php
    Par totof49 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 27/03/2009, 14h15
  4. Réponses: 9
    Dernier message: 21/05/2007, 00h33
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

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