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 :

Script extraction données dans fichier CSV


Sujet :

VBScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Script extraction données dans fichier CSV
    Bonjour,

    Aprés avoir cherché sur le forum, je me permets de faire ma demande car je n'ai pas trouvé de réponse (malgré la quantité de trés bonne information sur ce forum!!!)
    J'ai 1 fichier CSV dans lequel je souhaite extraire l'information d'une colonne dés lors qu'un mot-clé (ou plusieurs) est trouvé dans le contenu d'une autre colonne.

    Est ce que cela est possible en VBScript selon vous?
    Si oui, est ce que quelqu'un pourrait m'aider, je suis ultra débutant.

    Merci d'avance de vos réponses !!

    Nicolas.

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Un début de piste :

    Regarde du côté de l'objet FileSystemObject.
    Tu ouvres ton fichier
    Tu lis ligne par ligne (MonFichier.ReadLine)
    Tu fais un split de la ligne lue
    Tu boucles sur le ubound du tableau créé pour lire les valeurs séparées par des point-virgule

  3. #3
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    l'article "How Can I Parse a Tab-Delimited File and Then Save That as a Comma-Separated Values File?" des scripting guys devrait bien t'aider :

    http://www.microsoft.com/technet/scr...7/hey0323.mspx

    A++

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Merci pour ces réponses rapides.
    J'ai essayé d'utiliser le script expliqué des scripting Guys qui est assez bien expliqué mais lorsque j'essaie simplement de l'éxécuter sur ma machine, ça ne fonctionne pas.
    J'ai rien changé, je voulais juste tester (comme je vous l'ai dit, je suis débutant) mais j'ai une erreur qui me dit "Indice en dehors de la plage:[number: 1]"

    Vous savez pourquoi?

    Bon alors, apparement y'a un probleme avec le vbTab, parce que lorsque je simplifie le script cela fonctionne....
    En + je suis pas certain d'avoir besoin du vbTab donc je vais partir sans.

    Juste pour ré-expliquer l'objectif que je souhaite atteindre: J'ai 1 fichier CSV avec des infos séparées par des ";"
    Je voudrais 1 script qui fasse:
    "si Texte de la colonne D contient le mot "cool" alors extraire le texte de la colonne A et mettre dans 1 fichier texte ou csv"

    Est ce que ça vous semble faisable ?

  5. #5
    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 : 43
    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
    Pour ce qui est du code sur le lien, c'est normal que cela ne marche pas. Dans leur fichier CSV il sépare les éléments par une tabulation et non un ; comme toi.
    Remplace le vbtab par ";" et regarde ce que fait le script.

    Si tu débutes je te conseille de commencer par lire la FAQ VBScript.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui j'essaie de m'appuyer au maximum sur la FAQ VbScript mais je n'ai pas trouvé de réponse exacte à mon probleme.

    Est ce qu'il est possible de créer 1 script qui réponde à cette problématique?

    "si Texte de la colonne D contient le mot "cool" alors extraire le texte de la colonne A et le mettre dans 1 fichier texte ou csv"

    Merci !

    En fait j'aimerais savoir si ça vaut le coup que je creuse et que je passe du temps sur ce script car je ne suis pas certain que cela soit faisable et je n'ai pas trouvé la réponse ni sur le forum ni sur la FAQ.

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    mais si ca doit etre faisable !
    Teste moi ca :

    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
    Const ForReading = 1
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.csv", ForReading)
     
    Do Until objFile.AtEndOfStream
        strLine = objFile.ReadLine
        arrFields = Split(strLine, ";")
        If InStr(arrFields(3), "cool") > 0 Then
           strNewContent = strNewContent & arrFields(0) &  vbCrLf
        End If
    Loop
     
    objFile.Close
     
    Set objFile = objFSO.CreateTextFile("C:\Scripts\Testsauv.csv")
     
    objFile.Write strNewContent
     
    objFile.Close
    On ne devrait pas etre loin de ce que tu recherches non ?

    A++

  8. #8
    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 : 43
    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
    Remplace le vbtab par ";"
    Je pensais que cette phrase était compréhensible même pour un débutant.


  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    ced600 -> non, non j'avais bien compris le changement de vbtab par ";" et oui ça fonctionne mieux avec mon fichier.

    RadPAT -> merci pour le script, j'essaie ça et je vous dis si ça fonctionne !

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    ça a l'air d'assez bien fonctionner !!!
    Merci beaucoup.

    Idéalement je souhaite pouvoir tester la présence de plusieurs mots-clé.
    donc pour reprendre mon exemple
    "si Texte de la colonne D contient le mot "cool" ou "ado" ou "pote" alors extraire le texte de la colonne A et le mettre dans 1 fichier texte ou csv"

    En reprenant la ligne de code If InStr(arrFields(7), "panorama") > 0 Then, est ce que je peux rajouter plusieurs mots en faisant If InStr(arrFields(7), "cool,ado,pote") > 0 Then ??

    Ou encore mieux, l'idéal serait que je définisse ma liste de mots-clé dans 1 variable et que je reprenne la variable dans le "InStr" pour faire la comparaison.

  11. #11
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Citation Envoyé par nollier Voir le message
    est ce que je peux rajouter plusieurs mots en faisant If InStr(arrFields(7), "cool,ado,pote") > 0 Then ??
    Cette syntaxe n'est pas correcte, tu dois faire un "If" pour chaque mot à rechercher ou faire un "If" avec des "Or", comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If InStr(arrFields(7), "cool") > 0 Or InStr(arrFields(7), "ado") > 0 Or InStr(arrFields(7), "pote") > 0 Then...
    Si tu débutes commence par faire comme ca. Après tu pourras éventuellement utiliser un tableau ou un dictionnaire.

    A++

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai essayé avec le code proposé et ça fonctionne !!! Merci beaucoup pour vos conseils, ça m'a vraiment aidé.

    Vous parlez de la possibilité de construire un tableau ou un dictionnaire pour lister les mots-clé.
    Je me rends compte que j'ai beaucoup de mots-clé et donc bp de "Or" dans ma ligne If ...
    Où est ce que je peux trouver de l'info pour utiliser les tableaux ou les dictionnaires ?

    Merci encore vraiment pour tte votre aide.

  13. #13
    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 : 43
    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
    Pour les tableaux cela doit être dans la FAQ.

    Pour les dictionnaire, je n'ai plus de lien, donc je te conseil de taper ces mots clés sur google :
    Dictionnary VBScript (VBScript me donne de meilleur résultat de recherche que VBS)

    Ou sinon regarde sur W3School, les tableaux et les dictionnaires sont certainement expliqué.

  14. #14
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Voici un exemple simple de tableau et de dictionnaire dans l'article des scripting guys "How Can I Delete Duplicate Items From an Array?" :

    http://www.microsoft.com/technet/scr...6/hey1027.mspx

    A++

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Pas encore pu gérer la gestion des tableaux mais je vais m'y attaquer rapidement.
    Par contre j'ai une autre question: il semble que la reconnaissance de caractères par la fonction InStr() soit "Case sensitive".
    Par exemple, si je recherche le mot "cool" et que dans le fichier est présent "Cool" avec 1 majuscule, le mot n'est pas retenu.
    Existe t'il un moyen de ne pas prendre en compte le "case sensitive"?

    Merci
    Nicolas.

  16. #16
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,


    tu as Ucase(toto) qui te passe ta variable toto en majuscules avec un Instr ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Instr(Ucase(arrFields(7)),  "COOL") > 0 Then ....
    A++

  17. #17
    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 : 43
    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
    Ucase = Upper Case
    et il y a aussi Lcase = Lower Case -> Minuscule.
    Donc si tu passes les chaines à comparer à Ucase ou Lcase, tu supprimes le coté case sensitive, car tu les mets au même niveau.

  18. #18
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Re-bonjour à tous,

    Tout d'abord je voulais vous remercier pour toute l'aide apportée.
    Le script fonctionne trés bien et répond à mes besoins!

    Sauf que je deviens plus exigeant
    Est ce que vous pensez qu'il est possible de passer 1 fichier en paramètre qui contiendrait la liste des mots clés à vérifier?

    Ainsi au lieu d'avoir 1 liste à ralonge de " If InStr(arrFields(7), "cool") > 0 Or InStr(arrFields(7), "ado") > 0 Or InStr(arrFields(7), "pote") > 0 " j'aurais juste 1 fonction qui dirait d'aller vérifier si dans la colonne un des mots clés du fichier est présent.

    ça semble beaucoup plus compliqué mais je voudrais utiliser ce script sur 1 assez longue liste de mots-clé, donc le + simple est d'avoir ces mots-clé dans 1 fichier.

    Merci,

  19. #19
    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 : 43
    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
    Tu peux créer un fichier est y mettre les mots clés.
    Dans un scripts tu peux ouvrir et lire le fichier à l'aide de FileSystemObject.
    si tu utilises des séparateur comme ; ou tabulations dans le fichiers et que tu le nommes CSV, tu pourras définir des "colones" que pourra intréprété Excel. Mais aussi tu pourras t'appuyer sur ces séparateurs pour déterminer toi si tu es dans tel ou tel colonne.

    Dans le fichier de script soit tu fixe une adresse local du fichier en dure (genre c:\monfichier.txt) soit tu le récupère en arguments (passage en ligne de commande) soit tu utilises les variables d'environnement, ou les clés windows pour stocké le chemin du fichier.

Discussions similaires

  1. Script Connexion base mssql,résultat dans fichier csv
    Par guigui69 dans le forum VBScript
    Réponses: 1
    Dernier message: 09/06/2011, 19h04
  2. Script pour exporter des données dans fichier texte
    Par dionmaxime dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/03/2011, 06h18
  3. [CSV] Tri de données dans fichier CSV
    Par PhilippeIEP dans le forum Langage
    Réponses: 6
    Dernier message: 08/10/2008, 11h48
  4. Extract données dans un fichier .XML ?
    Par merssemic dans le forum SQL
    Réponses: 4
    Dernier message: 12/10/2007, 12h00
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 09h36

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