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 :

Sélectionner un fichier par expression régulière


Sujet :

VBScript

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Sélectionner un fichier par expression régulière
    Bonjour,

    après recherche je n'arrive pas à me débloquer sur un script.
    Je veux faire un sql = "LOAD DATA INFILE MonFichier INTO ..."

    Ce script sera automatisé pour faire un import chaque matin après réception du fichier, et le nom du fichier sera toujours VAD_yyyymmddhhmmss.csv

    J'ai testé plusieurs méthode :
    1) En regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set Regex = CreateObject("vbscript.regexp")
    regex.Pattern = "^VAD_[0-9]{14}\.csv$"
    Ca fonctionne mais je ne sais pas comment appeler ça dans mon LOAD DATA

    Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "LOAD DATA INFILE c:\"&regex&"" INTO TABLE ....
    Bon je sais que ça n'est pas ça mais c'est pour que vous compreniez ce que j'essaie de faire.

    2)
    Récupérer la date du jour dans une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    currentDate = Year(now)&""&Month(now)&""&Day(now)
    Mais là je bloque car je ne peux pas savoir l'heure à la seconde près où le fichier sera généré. Donc il me refaudrait une expression régulière pour l'heure, et du coup retour au point de départ.

    Quelqu'un pourrait-il me venir en aide ? Je sèche complétement.
    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    j'ai également tenté la regexp directement dans le XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LOAD DATA INFILE 'C:/*.csv' REGEXP 'C:/VAD_[0-9]{14}\.csv$ INTO TABLE ...'
    Mais il me retourne une erreur de syntaxe.
    A vrai dire je ne suis même pas sûr qu'on puisse utiliser une regexp sur un LOAD. Je trouve principalement des exemples sur SELECT

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici ce que je te propose.

    On créer la bonne regexp en forcant le mois et jour sur 2 caractères.
    On cherche dans un dossier, et on trouve le premier fichier qui correspond à cette regexp.
    J'ai mis cela dans la fonction "FindMyFile", si elle retourne vide "", c'est qu'aucun fichier n'est trouvé ou que le dossier n'existe pas.

    PS : Le chemin absolu du fichier est retourné par la fonction.

    Code vbscript : 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
    MyFile = FindMyFile("C:\MonDossier")
    msgbox MyFile
    wscript.quit
     
    Function FindMyFile(PathFolder)
    	FindMyFile = ""
    	Set fso = CreateObject("Scripting.FileSystemObject")
    	If (not fso.FolderExists(PathFolder)) Then Exit Function
     
    	Set Regex = CreateObject("vbscript.regexp")
    	regex.Pattern = "^VAD_" & Year(now) & Right("0" & Month(Now), 2) & Right("0" & Day(Now), 2) & "[0-9]{6}\.csv$"
    	regex.IgnoreCase = False
    	For Each objFile in fso.GetFolder(PathFolder).Files
    		If (regex.Test(objFile.Name)) Then
    			FindMyFile = objFile.Path
    			Exit Function
    		End If
    	Next
    End Function

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    merci beaucoup pour le coup de main. Me reste un petit problème.
    J'ai mis le bon chemin. La boîte de msgbox me l'affiche correctement.

    Seulement je me prends derrière une erreur où il me dit c:/wamp/bin/mysql5.6.12/data/ suivi du chemin de mon fichier, et donc ne trouve pas le fichier en question.

    Je regarde de où celà peut provenir.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Janvier 2014
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Bon comme je n'ai pas réussi à forcer le chemin, j'ai modifié la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each objFile in fso.GetFolder(PathFolder).Files
    		If (regex.Test(objFile.Name)) Then
    			FindMyFile = objFile.Path
    			Exit Function
    		End If
    	Next
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each objFile in fso.GetFolder(PathFolder).Files
    		If (regex.Test(objFile.Name)) Then
    			FindMyFile = objFile.Name
    			Exit Function
    		End If
    	Next
    Du coup j'ai passé le chemin absolu dans mon LOAD DATA INFILE en concaténant avec le nom du fichier, et ça fonctionne.

    Encore merci pour l'aide.
    Bonne journée.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2009, 11h06
  2. [RegEx] Remplacements par expressions régulières
    Par marielaure2805 dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2008, 11h53
  3. Extraction de couleur CSS par expression régulière
    Par frochard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/11/2007, 16h39
  4. [RegEx] Extraction d'une partie d'une URL par expression régulière
    Par Maxbenji dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2007, 22h26
  5. [XSLT] Child par expression régulière
    Par fredraoul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/02/2006, 12h43

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