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 :

Comment additionner les données d'un texte


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Comment additionner les données d'un texte
    Bonjour ,

    Voilà je débute en VBScript et je galère depuis quelques jours.
    J'ai un fichier texte qui contient des valeurs
    Exemple : 758.456, 5123, 128.475, 85 ..... etc
    J'ai besoin d'additionner toute ces valeurs contenues dans ce texte et l'afficher à l'écran mais je n'y arrive pas.
    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim FSO, MonFichier, FR, textCont
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Monfichier = FSO.GetFile("d:\contenu.txt")
    Set FR = Monfichier.OpenAsTextStream( 1,0)
    textCont = FR.ReadAll 'on l'a pas encore étudié, je sais !
    WScript.Echo "Contenu du fichier: " & textCont
    result =  textCont
     
    Function Addition1()
     Addition1=result
    End Function
    MsgBox Addition1()
    FR.Close
    Pourquoi j'ai besoin de ça ? Certains vont peut etre rire, c'est pour le boulot :
    - J'ai un répertoire qui contient plusieurs fichiers
    - Dans chaque fichier il y a une valeur que je dois prendre
    - Je dois faire le total de ces valeurs et l'afficher

    JE GALERE SEVERE !

    SVP qui pourrait m'aider ? Je vous remercie d'avance
    MERCI MERCI MERCI...


  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    As tu entendu parler des conversions ?

    Quand tu récupères les éléments de ton fichier, c'est du texte, des strings.
    Tu ne peut additionner que des int, des long, etc...

    Utilises les balises de code pour ton code (# dans le menu d'édition)
    D'où est ce qu'il sort ton résult, même pas déclaré.
    La telle qu'elle est, ta fonction Addition1 te sert à rien

    Bon première chose, récupère le contenu de ton fichier ligne par ligne et non entierement.
    Ensuite découpe la ligne à l'aide de split (voir la FAQ), en utilisant comme caractère de séparation celui qui sépare tes chiffres. Tu stock tout cela dans un tableau et tu l'envois dans une fonction Addition. Ensuite tu récupère la valeur que te renvois la fonction et tu l'ajoute à ta variable résultat final.
    Tu répète l'opération jusqu'à ce que tu est parcourus tout le fichier.
    Pour la fonction Addition, un simple parcours du tableau, une converstion de chacune des valeurs en int, long, ou autre ... Tu sommes le tout, et tu renvois la valeur.

    Tout ce qu'il faut savoir pour réaliser cela se trouve dans la FAQ, pour le reste à toi de jouer
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Tout d'abord merci CED pour ta réponse !
    A vrai dire je nage complètement. Disons que créer un programme c'est difficile mais le décortiquer c'est plus simple...
    Pourrais tu me donner un exemple de code STP ?
    Merci encore !

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je ne pense pas que tu puisses vraiment comprendre les choses en lisant du code. Le mieux est de le créer sois même.
    Je crois que j'ai bien maché l'algorithmie de ce script, alors tu devrais pouvoir t'en sortir.
    Pour chaque étape, tu as des exemples de code dans la FAQ.
    Essayes de le faire par toi même et reviens poster ce que tu as fait si tu bloques à certains endroits.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui tu as raison j'aimerais m'investir bcp plus mais j'ai une contrainte de temps... C'est pour ça. Si tu pouvais me donner un exemple de code je pourrais tester et l'adapter. Qd je bloquerai je viendrai poster...


  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai suivi ce que tu m'as dit jeune Padawan :

    première chose, récupère le contenu de ton fichier ligne par ligne et non entierement.
    Ensuite découpe la ligne à l'aide de split (voir la FAQ), en utilisant comme caractère de séparation celui qui sépare tes chiffres. Tu stock tout cela dans un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim tb 'Tableau
    Dim i 
    Const ForReading = 1
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("d:\contenu6.txt")  
     
    textCont = objFile.ReadAll 
     
    tb = split (textCont,"|")
    for i = 0 to ubound(tb)
      msgbox tb(i)
    Ce simple test m'affiche les valeurs une à une que je récupère du fichier texte ( les valeurs sont séparées par un "|" ici.

    Maintenant j'aimerais additionner toutes ces valeurs ??? Peux tu m'aider avec du code stp ??? MERCI d'avance

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je t'ai déjà parler de la conversion des string en int ou long !!! Regarde du coté de CLng.
    Si tu ne sais pas ce qu'est un string, c'est un type de données, si tu ne sais pas ce que c'est regarde la FAQ, elle est là pour ça.

    Oui tu as raison j'aimerais m'investir bcp plus mais j'ai une contrainte de temps... C'est pour ça. Si tu pouvais me donner un exemple de code je pourrais tester et l'adapter. Qd je bloquerai je viendrai poster...
    Bah moi aussi j'ai des contraintes de temps !!! Alors je n'ai pas le temps de faire ton script.

    Continue, tu es sur la bonne voie, et devant une difficulté, avant de crier à l'aide regarde comment tu peux résoudre le problème tout seul, et tu avanceras. Tu as capable de le faire, la preuve tu as commencé ton script.
    Ensuite on peut t'apporter de l'aide, mais on ne fera pas le script pour toi.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Décidemment personne pour m'aider ?
    J'avance de mon coté , pour l'addition :

    J'ai trouvé la commande cint qui permet de prendre un entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 0 to ubound(tb)
    total = cint(tb(0))+cint(tb(i))
     MsgBox tb(i)
    Maintenant ce que je n'arrive pas à faire, c'est additionner un par un les valeurs du tableau... Dans le code indiqué, j'additionne seulement la première et la dernière valeur du tableau...

    HELP PLEASE

  9. #9
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    C'est marrant ced600, j'ai posté en meme temps que toi....
    Merci pour l'aide que tu me donnes, tu m'as bien aiguillé
    Bon je continue et je reviens à la charge si je bloque...

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Utilise CLng si tu as des chiffre à virgule, les int c'est pour les entiers uniquement.

    Pour savoir comment réaliser ta boucle demande toi comment tu fait à la main :

    Moi quand je fait 1 + 2 + 3 + 4 + 5, je fait en fait :
    1 + 2 = 3
    3 + 4 = 7
    7 + 5 = 12

    Donc on peut résumez en :
    ancien total = 1 + 2
    nouveau total = ancine total + 3
    .....

    Donc on peut factoriser cela en :
    pour i qui varie de 0 à la fin de mon tableau et que j'incremente de 1
    faire
    total = total + une i valeur
    fin de faire

    Bien sur cela ne marche correctement que si total vaut 0 au départ !!!
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  11. #11
    Futur Membre du Club
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci CED j'avance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tb = split (textCont,"|")
    total = 0
    For i = 0 to ubound(tb)
    total = total + CLng(tb(i))
     
    Next
     
     MsgBox("Addition totale = " & total)


    Maintenant j'arrive à avoir le résultat de l'addition. J'ai bien mis le Clng pour les décimales ( mais apres l'addition finale, j'ai un nombre sans décimal ...bizarre ).

    Je continue ce casse tête et te tient au courant ( et attend toi à ce que je revienne à la charge ! )

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

Discussions similaires

  1. [OpenOffice][Texte] Comment inserer les données d'un fichier texte dans un ODT ?
    Par Legentleman97420 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 03/07/2013, 14h00
  2. Réponses: 2
    Dernier message: 31/01/2012, 13h33
  3. Comment classer les données d'une TStringList ?
    Par cmickyplus dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2005, 16h44
  4. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 14h03
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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