Extraire les url d'un fichier texte

Résolu
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 27 févr. 2007 à 18:04
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 2 mars 2007 à 14:03
Bonjour,
j'ai un fichier texte contenant plusieurs ligne de texte avec a l'intèrieur des url ecrite http://www.domaine.com.......
 et j'aimerai extraire ces url pour les mettre par exemple dans un fichier text a part.
Mais je ne sais pas comment faire pour trouver ces url?
Quelqu'un pourrai m'aider?
Merci

6 réponses

lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
2 mars 2007 à 12:30
Voici ce que j'ai fait et ca fonctionne:

Open App.Path & "/ok.txt" For Input As #1
While Not EOF(1)
  Input #1, a$
  ok = 0
  ligneapres = a$
 
  While InStr(ligneapres, "http://") > 0
 
        existe = InStr(ligneapres, "http://")
 
       If existe > 0 Then
        ligneapres = Mid(ligneapres, existe)
   
        existe1 = InStr(ligneapres, " ")
        existe2 = InStr(ligneapres, "'")
        existe3 = InStr(ligneapres, """")
        existe4 = InStr(2, ligneapres, "http://")
                If existe1 0 Then existe1 Len(ligneapres)        If existe2 0 Then existe2 Len(ligneapres)        If existe3 0 Then existe3 Len(ligneapres)        If existe4 0 Then existe4 Len(ligneapres)
       
               
             If existe1 <= existe2 And existe1 <= existe3 And existe1 <= existe4 Then existe = existe1
             If existe2 <= existe3 And existe2 <= existe1 And existe2 <= existe4 Then existe = existe2
             If existe3 <= existe1 And existe3 <= existe2 And existe3 <= existe4 Then existe = existe3
             If existe4 <= existe1 And existe4 <= existe2 And existe4 <= existe3 Then existe = existe4
       
        If existe <> Len(ligneapres) Then
             ligneavant = Left(ligneapres, existe - 1)
             ligneapres = Mid(ligneapres, existe)
        Else
        ligneavant = Left(ligneapres, existe)
        ligneapres = Mid(ligneapres, existe + 1)
        End If
      
       
        If List1.ListCount - 1 <= 0 Then
            List1.AddItem (ligneavant)
            MsgBox ligneavant
           
        Else
           For i = 0 To List1.ListCount - 1
       
                If List1.List(i) <> ligneavant Then
                ok = ok + 0
                Else
                ok = ok + 1
                End If
            Next i
            If ok = 0 Then List1.AddItem (ligneavant): MsgBox ligneavant
        End If



             
    End If
    Wend
Wend
Close #1
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
2 mars 2007 à 13:20
l'idée de lolpop d'utiliser des expressions rationelle est pas mal....

la RegExp proposée est un peu longue et complexe, mais l'idée est séduisante.
dans le code ci-dessous, je vous propose d'extraire tout ce qui est de la forme http (ou https) :// et tout ce qui suit, jusqu'au prochain espace, guillement quote ou balise <.

Dim sBuffer As String
Dim oRegExp As Object
Dim oMatch As Object
   Open App.Path & "\ok.txt" For Input As #1
       sBuffer = Input(LOF(1), #1)
   Close #1
   
   Set oRegExp = CreateObject("VbScript.RegExp")
   oRegExp.Global = True
   oRegExp.Pattern = "https?://[^"" <']+"
   
   For Each oMatch In oRegExp.Execute(sBuffer)
       List1.AddItem oMatch
   Next oMatch, ----
By Renfield

Pour mettre au point vos RegExp :
http://www.vbfrance.com/codes/REGEXP-WORKSHOP_17331.aspx

Pour ne pas conserver les doublons, voir SendMessage et LB_FINDSTRINGEXACT

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 févr. 2007 à 18:15
Bonsoir,

Ouverture de ton fichier texte et lecture de ces ligne, une par une (çà, tu sais faire ! une foultitude d'exemples et de sources sur ce forum...)
A chaque fois qu'une ligne contient http://www (ce que tu détermine par instr(laligne, http://www) >0
1) tu prends tout de qu'il y a à compter de cette position (utilisation de Mid(laligne, laposition)
2) tu regardes dans cette nouvelle chaîne s'il y a ou non un espace (utilisation de instr à nouveau) et :
  a) s'il n'y a pas d'espace, tu prends toute la sous-chaîne
  b) s'il y a un espace, tu ne gardes (en utilisant mid comme exposé plus haut) que ce qui va jusqu'à la position de cet espace -1

et ainsi de suite, ligne par ligne, jusqu'à la dernière ligne de ton fichier texte.

Essaye sur ces bases et reviens au besoin avec ton essai en nous exposant où tu rencontres une difficulté.
0
Egyde Messages postés 158 Date d'inscription lundi 17 mai 2004 Statut Membre Dernière intervention 16 juillet 2007
28 févr. 2007 à 14:26
Tu peux jeter un oeil sur une de mes sources si tu veux :
http://www.vbfrance.com/codes/COVER-SEARCH_39419.aspx

Les fonctions GetHyperText() et ExtractData() en particulier

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
2 mars 2007 à 01:56
Et si j'utilisé les regex?
Je viens de faire les regex pour les url:
Dim regEx As RegExp
  
    Set regEx = New RegExp
    regEx.Pattern = "^http(s)?://([a-z0-9-]+.)?([a-z0-9-]+.)?[a-z0-9-]+\.[a-z]{2,4}(:[0-9]+)?(/[_a-z0-9-]*/?|/[_a-z0-9-]+\.[a-z0-9]{1,15}(\?[\._=a-z0-9-]+)?/?)*?$"

Mais ensuite je ne sais pas torp quoi faire pour trouver le texte et le selectionner.<!-- END TEMPLATE: bbcode_code -->
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
2 mars 2007 à 14:03
Mais non elle est pas compliqué ma regex :)
0
Rejoignez-nous