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 :

Besoin d'avis technique


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut Besoin d'avis technique
    Bonjours,
    J'aurais besoins d'avis pour faire au plus simple.
    Voila je recois des massages contenant des abreviations.Ce que je souhaiterai c'est traiter le messages de maniere a transformer les abr. en leur formes longues.
    J'ai un fichier texte avec les abre. et leurs correspondances. Il y a environ 600Abre.
    Merci
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  2. #2
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut,
    Citation Envoyé par hugoclo Voir le message
    je recois des massages
    T'en as de la chance!

    Moi j'utiliserais un Dictionary(Of String, String) avec l'abréviation comme clé et la forme longue comme valeur..
    J’ai des questions à toutes vos réponses!

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    et pour faire au plus simple ca serait un replace par entrée du dictionnaire (penser à mettre les clés avec des espaces autour)
    par contre c'est loin d'être le plus performant
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Merci
    Pour le Dictionary j'ai trouver des renseignement pour l'ajout sur le cours de "PLASSERRE" par contre je ne vois pas comment m'en servir
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  5. #5
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Tout dépend de l'utilisation que tu veux en avoir..
    Ici, un exemple où l'on remplace les abréviations par les mots complets dans une phrase:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim strShort As String = " ex : on pt s'en servir kom ca."
     
            Dim dico As New Dictionary(Of String, String)
            dico.Add(" ex ", " exemple ")
            dico.Add(" pt ", " peut ")
            dico.Add(" kom ", " comme ")
     
            Dim strLong As String = strShort
     
            For Each kv In dico
                strLong = strLong.Replace(kv.Key, kv.Value)
            Next
     
            MsgBox(strLong)
    Les remarques de Pol63 sont très judicieuses. Un For each avec 600 possibilités c'est assez lourd.. De plus je viens de comprendre l’intérêt des espaces ^^
    J’ai des questions à toutes vos réponses!

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un regex devrait être plus performant, il parrait que ca peut se compiler, par contre faut aimer écrire des regex (sans compilation c'est peu performant par contre)
    sinon on doit pouvoir écrire un algo spécifique qui serait le plus performant ...

    dans un premier temps tu peux tester avec le dictionary, si tes strings ne sont pas super long et que tu as peu d'entrées dans le dictionary ca devrait suffire

    voici un test (au passage tu peux voir la méthode de test de performance)
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Public Class Form1
     
        Dim dico As New Dictionary(Of String, String)
     
        Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            For i As Integer = 1 To 5000
                dico.Add(i.ToString, i.ToString & i.ToString)
            Next
     
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.Text = ""
            Dim s As String = "hazhe azeji jiazoe2 jiazjiej az1je i"
     
            Dim ch As New System.Diagnostics.Stopwatch
            ch.Start()
     
            For Each k As String In dico.Keys
                If s.Contains(k) Then s = s.Replace(k, dico(k))
            Next
     
            ch.Stop()
            Me.Text &= ch.ElapsedMilliseconds & " "
            ch.Reset()
            ch.Start()
     
            For Each k As String In dico.Keys
                s = s.Replace(k, dico(k))
            Next
     
            ch.Stop()
            Me.Text &= ch.ElapsedMilliseconds & " "
            ch.Reset()
            ch.Start()
     
            Dim sb As New System.Text.StringBuilder
            sb.Append(s)
     
            For Each k As String In dico.Keys
                sb.Replace(k, dico(k))
            Next
     
            ch.Stop()
            Me.Text &= ch.ElapsedMilliseconds
     
        End Sub
    End Class
    résultats : 1ms 6ms 130ms le gagant est donc string/contains/replace
    pour une fois le stringbuilder n'est pas la solution (pour de l'append il est beaucoup plus rapide que le string)
    pour 5k dans le dico, et un string à tester

    NB : quand on fait des tests, il faut appeler plusieurs fois la méthode, le 1er appel contient le temps de compilation qui fausse les résultats (une appli .net est compilée à chaque exécution au fur et à mesure des appels)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Besoin d'avis sur un offre d'embauche en SSII
    Par Anne_so2121 dans le forum SSII
    Réponses: 14
    Dernier message: 25/07/2005, 13h09

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