Recherche de texte et moyenne

Bonjour à toutes et à tous,

je voudrais, grâce à une macro, pouvoir compter le nombre d'apparitions de mots dans des fichiers .txt (voir exemple en PJ).

Je voudrais pour chaque "Ray" récupérer son numéro et compter le nombre de fois que "Impact" apparaît avant l'apparition du Ray suivant. Ici il n'y a que 2 Ray mais dans la réalité il peut y en avoir jusqu'à 100 millions... Après ça je voudrais connaître le nombre total de Ray et la moyenne du nombre d'Impact.

Enfin, une fois ces éléments comptés, je voudrais qu'ils soient écrits dans des cellules excel.

Mon code, qui ne fonctionne pas, est aussi en pj.

Merci pour votre aide !

8code.txt (1.10 Ko)

Bonjour,

une proposition

Sub test()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "ouvrir fichier texte"
        .Filters.Clear
        .Filters.Add "text file", "*.txt"
        .AllowMultiSelect = False
        If .Show = -1 Then
            fichiercible = .SelectedItems(1)
        End If
    End With
    Open fichiercible For Input As 1
    Input #1, l
    pl = 1
    c = 0
    While Not EOF(1)
        If Left(l, 3) = "Ray" Then
            If pl <> 1 Then Cells(pl, 2) = c: c = 0
            pl = pl + 1
            Cells(pl, 1) = replace(l,"Ray: ","")
        Else
            If Left(l, 6) = "Impact" Then c = c + 1
        End If
        Input #1, l
    Wend
    Close
    Cells(pl, 2) = c
End Sub

C'est pas mal different de ce que j'avais fait mais ca fonctionne !

Merci !


As-tu une idee pour la moyenne ?

re-bonjour,

une idée pour la moyenne

Sub test()
' choisir le fichier à ouvrir, résultat dans fichiercible
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "ouvrir fichier texte"
        .Filters.Clear
        .Filters.Add "text file", "*.txt"
        .AllowMultiSelect = False
        If .Show = -1 Then
            fichiercible = .SelectedItems(1)
        End If
    End With
    Cells.Clear ' vider la feuille
    Open fichiercible For Input As 1 'ouvrir le fichier choisi
    Input #1, l ' lire la première ligne
    pl = 1 'pl = pointeur de ligne pour les ray trouvés, est aussi le nombre de ray trouvés +1
    c = 0 ' c=compteur d'impacts trouvés pour un ray
    While Not EOF(1) ' tant qu'on n'est pas à la fin du fichier
        If Left(l, 3) = "Ray" Then ' si ligne contient ray
            If pl <> 1 Then Cells(pl, 2) = c: sc = sc + c: c = 0 ' on met le nombre d'impacts trouvés pour le ray précédent dans C, on totalise le nombre d'impacts total dans sc
            pl = pl + 1 ' on passe à la ligne pour le ray suivant
            Cells(pl, 1) = Replace(l, "Ray: ", "") ' on y écrit son numéro 
        Else
            If Left(l, 6) = "Impact" Then c = c + 1 ' si impact trouvé, on incrémente le compteur d'impacts
        End If
        Input #1, l ' on lit la ligne suivante du fichier
    Wend
    Close ' on ferme le fichier 
    Cells(pl, 2) = c ' on écrit le compteur d'impact pour le dernier ray
    sc = sc + c ' on adapte le total des impacts
    Cells(1, 1) = "N° Ray" ' entêtes de colonnes
    Cells(1, 2) = "# impacts"
    Cells(1, 3) = "Moyenne"
    Cells(2, 3) = sc / (pl - 1) ' calcul de l moyenne
End Sub

Merci encore une fois !

J'ai quand meme une question, a quoi sert le Input juste avant le Wend ?

Re bonjour,

j'ai mis des commentaires dans le code.

Merci beaucoup, je comprend mieux pourquoi mon programme ne marchait pas, j'etais persuadee qu'il le faisait tout seul...

a une prochaine !

Rechercher des sujets similaires à "recherche texte moyenne"