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 :

Recuperer plusieurs chaine de caractère. [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut Recuperer plusieurs chaine de caractère.
    Bonjour, J'ai un petit problème concernant la récupération caractère dans cette chaine de caractère:

    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
     
    <head>
    <layout>
    <root-layout width="240" height="320"/>
    <region id="Text" width="100%" height="30%" left="0%" top="70%" fit="scroll"/>
    <region id="Image" width="100%" height="70%" left="0%" top="0%" fit="meet"/>
    </layout>
    </head>
    <body>
    <par dur="8000ms">
    <img src="62237_1508781251894_1605223575_1255994_5397485_n.jpg" region="Image"/>
    </par>
    <par dur="8000ms">
    <img src="292861_235321486509036_100000935601583_623310_2267856_n.jpg" region="Image"/>
    </par>
    </body>
    </smil>
    J'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto50 = Mid(c, InStr(c, "<img "), InStrRev(c, " region="))
    Le problème sa récupère les deux en même temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <img src="62237_1508781251894_1605223575_1255994_5397485_n.jpg" region="Image"/>
    </par>
    <par dur="8000ms">
    <img src="292861_235321486509036_100000935601583_623310_2267856_n.jpg" region=
    hors je veux récupérer les noms de fichiers contenu dans les balise (<img src=" .... " region="Image"/>) séparément l'un après l'autre.
    Merci de m'aider

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour miss12520,

    Il faut utiliser les expressions régulières (RegEx) combinées avec une fonction d'extraction de chaîne (ParseBetween) :

    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
     
            Dim str$ = "<body>" & vbNewLine & _
                       "    <par dur=""8000ms"">" & vbNewLine & _
                       "        <img src=""62237_1508781251894_1605223575_1255994_5397485_n.jpg"" region=""Image""/>" & vbNewLine & _
                       "    </par>" & vbNewLine & _
                       "    <par dur=""8000ms"">" & vbNewLine & _
                       "        <img src=""292861_235321486509036_100000935601583_623310_2267856_n.jpg"" region=""Image""/>" & vbNewLine & _
                       "    </par>" & vbNewLine & _
                       "</body>"
     
            Dim rx As New RegularExpressions.Regex("<img src="".*""Image""/>")
            Dim mc As MatchCollection = rx.Matches(str)
            For Each m In mc
                If Not m Is Nothing Then
                    Dim img$ = ParseBetween(m.ToString, "<img src=""", """ region=""Image""/>", "<img src=""".Length)
                    MsgBox(img)
                End If
            Next
    La fonction ParseBetween :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Public Function ParseBetween(ByVal Source$, ByVal Before$, ByVal After$, ByVal Offset%) As String
            If String.IsNullOrEmpty(Source) Then Return String.Empty
            If Source.Contains(Before) = True Then
                Dim Result As String = Source.Substring(Source.IndexOf(Before) + Offset)
                If Result.Contains(After) = True Then
                    If Not String.IsNullOrEmpty(After) Then Result = Result.Substring(0, Result.IndexOf(After))
                End If
                Return Result
            Else
                Return String.Empty
            End If
        End Function

    Voilà j'espère que tu y verras plus clair.

    A+

  3. #3
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Ou alors en réfléchissant bien on peut surcharger la méthode parseBetween et ainsi obtenir directement toutes les occurences dans un tableau de string comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       For Each m In ParseBetween(src, "<img src=""", """ region=""Image""/>")
                If Not m Is Nothing Then
                   MsgBox(m)
                End If
            Next
    La méthode ParseBetween qui retourne cette fois un tableau de string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Public Function ParseBetween(Source$, Before$, After$) As String()
            Dim Results As New List(Of String)
            Dim T As New List(Of String)
            With T
                .AddRange(Regex.Split(Source, Before))
                .RemoveAt(0)
                For Each Item As String In T
                    Results.Add(Regex.Split(Item, After)(0))
                Next
            End With
            Return Results.ToArray
        End Function
    Voilà tout A+

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Par défaut
    Je te remercie Wallace1 c'est exactement ce que je voulais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Location = IO.Directory.GetFiles(TextBox1.Text, "*" & ".mmc")
     
            For Each fichier As String In location
            c = IO.File.ReadAllText(fichier, System.Text.Encoding.Default)
     
            For Each m In ParseBetween(c, "<img src=""", """ region=""Image""/>")
                If Not m Is Nothing Then
                    toto = Path.GetFileNameWithoutExtension(fichier)
                    IO.File.WriteAllText(fichier2 & toto55 & ... & ".txt", m, System.Text.Encoding.Default)
                End If
            Next
    Cependant il reste encore deux problèmes:
    1 - J'ai beaucoup de fichier à traiter.
    2 - Il faut que chaque nom récupéré soit enregistré dans un fichier différant.
    Je ne sais pas comment énumérer les fichier sortent ex: (fichier(1).txt, fichier(2).txt etc..)
    Merci de ton aide.

    Un autre problème: il faut que les balises (<img src=" et region="Image"/>) soient intégré au fichier de sortie et donc récupérer les balise avec.. ex: (<img src=" image.jpg" region="Image"/>) .

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Je veux bien te donner un coup de pouce mais là tu abuses !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Un autre problème: il faut que les balises (<img src=" et region="Image"/>) soient intégré au fichier de sortie et donc récupérer les balise avec.. ex: (<img src=" image.jpg" region="Image"/>) .
    Dans mon premier exemple tu as la solution ! Un peu de bon sens tout de même o_O !!

    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
     
      Dim str$ = "<body>" & vbNewLine & _
                       "    <par dur=""8000ms"">" & vbNewLine & _
                       "        <img src=""62237_1508781251894_1605223575_1255994_5397485_n.jpg"" region=""Image""/>" & vbNewLine & _
                       "    </par>" & vbNewLine & _
                       "    <par dur=""8000ms"">" & vbNewLine & _
                       "        <img src=""292861_235321486509036_100000935601583_623310_2267856_n.jpg"" region=""Image""/>" & vbNewLine & _
                       "    </par>" & vbNewLine & _
                       "</body>"
     
            Dim rx As New RegularExpressions.Regex("<img src="".*""Image""/>")
            Dim mc As MatchCollection = rx.Matches(str)
            For Each m In mc
                If Not m Is Nothing Then
                    'Dim img$ = ParseBetween(m.ToString, "<img src=""", """ region=""Image""/>", "<img src=""".Length)
                    'MsgBox(img)
                    Msgbox(m.tostring)
                End If
            Next
    Pour ce qui concerne la génération aléatoire de tes noms de fichier tu peux utiliser la classe "Random" :

    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
     
       Dim str$ = "<body>" & vbNewLine & _
                   "    <par dur=""8000ms"">" & vbNewLine & _
                   "        <img src=""62237_1508781251894_1605223575_1255994_5397485_n.jpg"" region=""Image""/>" & vbNewLine & _
                   "    </par>" & vbNewLine & _
                   "    <par dur=""8000ms"">" & vbNewLine & _
                   "        <img src=""292861_235321486509036_100000935601583_623310_2267856_n.jpg"" region=""Image""/>" & vbNewLine & _
                   "    </par>" & vbNewLine & _
                   "</body>"
     
            Dim rx As New RegularExpressions.Regex("<img src="".*""Image""/>")
            Dim mc As MatchCollection = rx.Matches(str)
     
            Dim rdn As New Random
     
            For Each m In mc
                If Not m Is Nothing Then
                    'Dim img$ = ParseBetween(m.ToString, "<img src=""", """ region=""Image""/>", "<img src=""".Length)
                    'MsgBox(img)
                    IO.File.WriteAllText("C:\" & rdn.Next(0, 3000).ToString & ".mmc", m.ToString, System.Text.Encoding.Default)
                End If
            Next
    A toi maintenant d’adapter tout ça à tes besoins car je le rappel ici c'est pas une commande "snippets" à la carte. On est là pour t'aiguiller et à toi de faire travailler ta matière grise pour le reste.

    A+

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Une autre façon de faire
    En donnant simplement le nom de l'image au fichier (pas de doublon de nom d'images) (le ligne.Contains("region=""Image""") n'est peut-être pas obligatoire mais présent par sécurité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For Each fichier As String In IO.Directory.GetFiles("D:\data\fichiers\", "*.mmc")
                For Each ligne As String In File.ReadAllLines(fichier)
                    If ligne.Contains("<img src=") And ligne.Contains("region=""Image""") Then
                        System.IO.File.WriteAllText("D:\data\fichiers\" & ligne.Split("""")(1) & ".txt", ligne)
                    End If
                Next ligne
            Next
    Avec un compteur qui permet de différencier tous les noms des images.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Dim i As Integer = 0
            For Each fichier As String In IO.Directory.GetFiles("D:\data\fichiers\", "*.mmc")
                For Each ligne As String In File.ReadAllLines(fichier)
                    If ligne.Contains("<img src=") And ligne.Contains("region=""Image""") Then
                        i += 1
                        System.IO.File.WriteAllText("D:\data\fichiers\" & ligne.Split("""")(1) & "_" & i.ToString & ".txt", ligne)
                    End If
                Next ligne
            Next
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. [Toutes versions] Rechercher plusieurs chaines de caractères en VBA
    Par ludovicparis dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/11/2010, 17h40
  2. Réponses: 4
    Dernier message: 31/08/2010, 17h45
  3. Réponses: 3
    Dernier message: 06/03/2009, 09h59
  4. Réponses: 2
    Dernier message: 07/03/2007, 10h46
  5. Réponses: 2
    Dernier message: 24/09/2006, 21h21

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