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 :

Amélioration d'un algorithme


Sujet :

VB.NET

  1. #1
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut Amélioration d'un algorithme
    Salut,

    J'ai un petit problème d'algorithme qui me plait pas trop, même si ça marche :

    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
     
            'On sait que le debut du fichier audio commence par "RIFF"
            For i = 0 To byteCount - 1
     
                'On recherche l'en-tête du fichier WAV (RIFF), si trouvé, on décode le fichier wav
                If requestBin(i) = retour_ligne(0) Then
                    If requestBin(i + 1) = retour_ligne(1) Then
                        If requestBin(i + 2) = retour_ligne(2) Then
                            If requestBin(i + 3) = retour_ligne(3) Then
                                FoundWav = True
                                Exit For
                            End If
                        End If
                    End If
                End If
     
            Next
    retour_ligne est définit comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim retour_ligne() As Byte = {Asc("R"), Asc("I"), Asc("F"), Asc("F")}
    Il s'agit en fait de traiter l'en-tête d'un fichier wave.

    Quelle solution plus "sympa" pourrait-on écrire ? Ici, ça va parce qu'il n'y a que 4 octets, mais si y'en avait plus...

    Et le requestbin comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim byteCount As Integer
            Dim requestBin As Byte()
    Je récupère un fichier wav par le flux http en fait.

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Ce n'est peut-être pas le plus élégant mais ça a le mérite d'être simple. Il vaut parfois mieux un code un peu moins élégant mais qui est plus facile à maintenir.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Pour la deuxieme question retour_ligne
    un Encoding.GetBytes peut etre utiliser

    Pour la premiere question

    Array.BinarySearch peut t'aider.

    Bon coding

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Sinon plutôt que lire octet par octet, tu fais une méthode qui te renvoie un tableau de 4 octets (dans le cas présent) et tu compares ce tableau avec celui de référence. S'ils sont identiques c'est gagné.

    Pour la comparaison, il suffit de parcourir les éléments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private bool CompareArray(byte[] b1, byte[] b2)
    {
        if (b1.Length != b2.Length)
        {
            return false;
        }
     
        for (int i = 0; i < b1.Length; i++)
        {
            if (b1[i] != b2[i]) { return false; }
        }
     
        return true;
    }
    Désolé c'est du C#, mais ça reste compréhensible ^^
    Pas de questions techniques par MP

Discussions similaires

  1. Amélioration d'un algorithme de conversion de couleur
    Par progfou dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 06/02/2014, 20h33
  2. Amélioration de l'algorithme de Huffman
    Par Nosper dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 28/08/2012, 01h10
  3. Réponses: 2
    Dernier message: 11/06/2009, 17h06
  4. Améliorer un algorithme de complexité quadratique
    Par 1tox dans le forum Mathématiques
    Réponses: 12
    Dernier message: 20/04/2009, 09h06
  5. Améliorer l'algorithme de mon memcpy
    Par progfou dans le forum C++
    Réponses: 26
    Dernier message: 24/04/2007, 05h23

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