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

VB.NET Discussion :

Extraction de données de logs dans un répertoire vers Excel [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut Extraction de données de logs dans un répertoire vers Excel
    Bonjour,

    Etant en stage depuis 1 semaine dans le cadre de mon DUT R&T, mon tuteur m'a demandé de réaliser une macro qui consiste à lister les infos de plusieurs logs contenus dans un répertoire. Les infos que je dois récupérer se trouvent pour chaque log à la dernière ligne et je dois en extraire deux parties (la date et le nom d'utilisateur colorés en rouge dans la ligne exemple ci-dessous) :

    29/03/2017 09:08:09: User: XXXXX - Model: Precision XBTFG - Tag: 65E5G3

    Sachant que le nom d'utilisateur est une chaîne variable ...

    Les résultats doivent être présentés sur une feuille excel avec comme première colonne le nom du fichier log, puis en deuxième et troisième colonne la date et le nom d'utilisateur correspondant à son log.

    Je n'ai jamais fait de Virtual Basic auparavant et après de nombreuses recherches sur Internet, la seule chose que j'ai su adapter pour mon cas, c'est de lister le nom des logs :
    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
     
    Sub numero_machine()
    Dim Dossier As Object, fichier As Object
    Dim Chemin As String
    Dim i As Long
    Columns("B:B" ).Select
    Selection.ClearContents
    Chemin = "MonChemin"
    Set Dossier = CreateObject("Scripting.FileSystemObject" ).GetFolder(Chemin)
     
    For Each fichier In Dossier.Files
    i = i + 1
    Cells(i, 1) = Left(fichier.Name, InStr(fichier.Name, "." ) - 1)
    Next
     
    End Sub
    Quelle doit-en être la suite ? Expliquer moi comment je dois faire ?

    Merci d'avance !

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    t'a-t-on imposé un format spécifique pour Excel ? Car sinon il y a le format CVS qui ne nécessite pas d'automation (beaucoup plus simple pour un débutant à mon sens). Pour l'extraction des données il va te falloir plusieurs connaissance :
    - manipuler un fichier texte,
    - lire la dernière ligne d'un fichier,
    - extraire la donnée intéressante de cette ligne.

    Pour ce dernier point tu peux faire du parcours char à char, ou utiliser une regex (à vérifier, et selon la variation des dernières lignes).

    PS : DUT R&T et tu fais de la prog ? Enfin c'est peut-être normal, je connais pas (je suis GI).
    PS2 : quel Framework .NET utilises-tu ?
    PS3 : c'est Visual Basic

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    Rebonjour,

    Merci pour cette réponse rapide ! J'ai déjà un fichier de base Excel au format .xlsm que je dois utiliser pour créer un bouton qui permettra de mettre à jour les informations dans le fichier. J'ai réussi à extraire la dernière ligne de chaque log dans le répertoire avec ceci :
    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
    Sub Actualiser()
     
    Dim Dossier As Object, fichier As Object
    Dim Chemin As String
    Dim i As Long
    Columns("B:B").Select
    Selection.ClearContents
    Chemin = "MonChemin"
    Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
     
    For Each fichier In Dossier.Files
    i = i + 1
    Cells(i, 1) = Left(fichier.Name, InStr(fichier.Name, ".") - 1)
    Cells(i, 2) = OpenTextFileTest(fichier.Name)
    Next
     
    End Sub
     
    Function OpenTextFileTest(FileToOpen As String)
        Const ForReading = 1, ForWriting = 2, ForAppending = 3
        Dim fs, f
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set f = fs.OpenTextFile("MonChemin" & FileToOpen, ForReading, TristateFalse)
     
     Do While Not f.AtEndOfStream
     
            Result = f.readLine
     
        Loop
     
        f.Close
        OpenTextFileTest = Result
    End Function
    Il faut maintenant que j'utilise un séparateur de champs pour les espaces et que j'en extrais uniquement la première et la quatrième chaîne de caractère. Comment dois-je procéder ?

    PS : Oui dans mon cursus on apprend à programmer, nous ne faisons pas que du réseau et de la télécom . Le Framework .NET que j'utilise est la version 4.6 et c'était la fin de la journée, il ne faut pas m'en vouloir

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Re,

    pas de souci pour le temps de réponse
    Une petite question avant de poursuivre : on parle bien de VB.NET et non de VBA ?
    En fait je suis étonné par l'utilisation d'un CreateObject pour avoir un objet permettant de manipuler le FS.
    Perso j'aurais plutôt utilisé les objets typés du namespace System.IO, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ' lister les fichiers d'un répertoire
    For Each file As String In System.IO.Directory.EnumerateFiles("C:\\folder")
        ' do stuff
    Next
    ' pour obtenir la dernière ligne d'un fichier (avantage supplémentaire : gère si le fichier finit par un saut de ligne)
    Dim lastLine as String = File.ReadLines("C:\\folder\\file.txt").Last
    Pour l'extraction des données de la dernière ligne, le nom de l'utilisateur peut-il contenir une espace ?
    Cette dernière ligne est-elle toujours exactement de la forme que tu nous as présentée ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 9
    Par défaut
    C'est du VBA ... donc je devrais redirigé mon post dans la catégorie Excel ... ? Le nom de l'utilisateur ne contient jamais d'espace et la dernière ligne est de la même forme pour chaque log.

  6. #6
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Je pense qu'effectivement l'aide que tu obtiendras sur le forum dédié sera plus intéressante (le lien).

    Pour l'extraction de la donnée, vu que ça ne bouge jamais, tu pourrais utiliser une Regex avec des groupes de capture, mais ça me parait un peu lourd (et je n'ai absolument aucune idée de comment ça se fait en VBA). Mais du coup tu peux le faire également au char par char :
    - la date correspond aux 10 premiers caractères,
    - le nom correspond à la sous-chaine qui comment au char 27, jusqu'à croiser une espace.
    En VB.NET (mais certainement facilement retranscriptible en VBA) ça donnerait un truc comac :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            ' un exemple de "dernière ligne"
            Dim lastLine As String = "29/03/2017 09:08:09: User: jopopmk - Model: Precision XBTFG - Tag: 65E5G3"
            ' on récupère la date dans les 10 premier char
            Dim sDate As String = lastLine.Substring(0, 10)
            ' le user commence au char 27, on va d'abord avancer à ce niveau
            Dim user As String = lastLine.Substring(27)
            ' depuis ce 27ème char on cherche la première espace
            Dim spacePos As Integer = user.IndexOf(" ")
            ' reste plus qu'a tronquer au niveau dudit espace
            user = user.Substring(0, spacePos)
            ' un tit affichage pour vérifier (avec des crochets pour être sûr qu'on prend pas d'espace en trop)
            MessageBox.Show("user : [" & user & "]" & Environment.NewLine & "date : " & "[" & sDate & "]")
    Bon, et c'est la dernière fois que je fais du VB.NET aujourd'hui, ça met en vrac mon pauv' VS

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/12/2015, 18h19
  2. [XL-2013] Extraction de données et Recherchev dans plusieurs fichier XL
    Par anoulay dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/06/2015, 05h56
  3. [Toutes versions] Arborescence répertoire vers Excel
    Par kiko_gre dans le forum Excel
    Réponses: 8
    Dernier message: 27/07/2011, 11h29
  4. Réponses: 9
    Dernier message: 14/03/2011, 20h06
  5. Réponses: 9
    Dernier message: 19/01/2009, 13h45

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