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 chaines


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Par défaut Extraction de chaines
    Bonsoir tous le monde,

    je suis en train de ma casser les dents sur un bout de code que j'ai crée qui me permet d'extraire, des donnés d'une chaîne de caractère, voici la façon dont elle se présente :
    Vehicule : BMW S3 120CV
    Equipage : 01- COND LAURENZO LAMAS
    02- CHEF PIERROT LE CLOWN
    03- CHEF ALAIN MARTIN

    Vehicule : AUDI TT 200 CV
    Equipage : 01- COND JAMES BOND
    02- CHEF MARC FLAMBY
    03- CHEF VODKA PIERRE
    04- CHEF DURANT MARTIN
    05- CHEF MARTIN LUCIEN
    Sachant qu'il peut y avoir plusieurs Vehicule et l'équipage par vehicule est compris entre 01 et 09 maximum.

    j'ai donc crée ceci pour stocker mes données extraites dans un tableau :

    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
    34
    35
    36
    37
    38
    39
    Dim enregistre(30, 5) As String
        'tableau ---------------> ENREGISTRE
        '======================================================================
        ' | vehicule | fonction | Nom & Prenom |
        '======================================================================
        ' | BMW     | 01-      | JAMES BOND   |
     
            For Each ligne As String In TextBox1.Text.Split(ControlChars.NewLine)
        Dim debut_ve As Integer = datas.IndexOf("Vehicule : ") + 11 'entier qui repére le nom vehicule et ajoute 11
        Dim fin_ve As Integer = datas.IndexOf(ControlChars.NewLine, debut_ve) 'entier qui repére la fin de la ligne
        Dim longeur_ve As Integer = fin_ve - debut_ve 'soustrait la fin du début de la postion de vehicule
        Dim vehicule_extrait As String = datas.Substring(debut_ve, longeur_ve)
        Dim vehi_tab() As String = vehicule_extrait.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries)
        Dim vehicule As String = vehi_tab(0)
     
        Dim i As Integer
        Dim e As Integer
        Dim lafonction As String
                For e = 0 To 100
                    For i = 1 To 50 
                        lafonction = "0" & i & "-" 'on boucle sur le nombre de fonction
                        If datas.Contains(lafonction) Then
        Dim debut_la As Integer = datas.IndexOf(lafonction) + 3
        Dim fin_la As Integer = datas.IndexOf(ControlChars.NewLine, debut_la)
        Dim longeur_la As Integer = fin_la - debut_la
        Dim equipage_la As String = datas.Substring(debut_la, longeur_la)
        Dim lesnom() As String = equipage_la.Split(New String() {}, StringSplitOptions.RemoveEmptyEntries)
        Dim lenom As String = Nothing 'on vide la var avant de la remplir sinon les nom s'ajoute a la suite
                            For j As Integer = 1 To lesnom.Length - 1
                                lenom += lesnom(j) & " "  'on récupére juste le nom et le prenom -> a partir de lesnom(02)
                            Next j
                            enregistre(e, 0) = vehicule
                            enregistre(e, 1) = lafonction
                            enregistre(e, 2) = lenom
                            e = +1 'on incrémente le tableau enregistrement
                        End If
                    Next i
                Next e
            Next
    Le problème c'est que ce code bloucle toujours sur l'équipage du premier véhicule trouvé, il tourne indéfinimément en remplissant mon tableau enregistre des 3 première personnes concerné par le véhicule !

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    déjà les tableaux depuis les années 2000 on essaye de les éviter
    donc un petite classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Vehicule
      public property Nom as string
      public property Equipage as new list(of string)
    end class
    ensuite votre code est peu lisible et pourrait être plus court, il faut réfléchir à comment rendre les choses plus simples, que ca soit sur le problème de départ ou la méthode pour arriver à vos fins

    un exemple :
    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 vehicules as new list(of vehicule)
     
    dim s as string = io.file.ReadAllText(path)
    s = s.replace("Vehicule : ","").replace("Equipage : ","") ' ces entêtes nous embêtent plus qu'autre chose
     
     
    dim currentvehicule as vehicule
    for each ligne as string in split(s,vbcrlf)
      if currentvehicule is nothing then ' le 1er tour passe aussi par là
          currentvehicule as new vehicule with {.Nom = ligne}
          vehicules.add(currentvehicule)
          continue for
      end if
     
      if ligne.trim = "" then ' si ligne vide, on passe à la ligne suivante, qui sera un nouveau véhicule
         currentvehicule = nothing
         continue for
      end if 
     
      currentvehicule.equipages.Add(ligne)
    next
    si le fichier diffère un peu il faut adapter le code

    après vous pouvez faire un for each v as vehicule in vehicules, et sur chaque vehicule un for each e as string in v.equipage

    si vous voulez découper l'équipage avec du split, vous pouvez faire une classe Equipage

    il y a plein d'autres méthodes possibles, et surement des plus courtes même (par exemple découper sur les lignes vides et faire un peu de linq)

    * : syntaxe vb2010
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Extraction de chaine de caractères
    Par asterix76-rouen dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 23h17
  2. Extraction de chaine
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/02/2006, 09h01
  3. Requete avec extraction de chaine
    Par bestall666 dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2006, 18h17
  4. [String]Extraction de chaîne
    Par sangei dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2005, 11h25
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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