begin process at 2013 05 25 09:33:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Optimisation du code

 > PROFIL BINAIRE D'UN OBJET

PROFIL BINAIRE D'UN OBJET


 Description

Cliquez pour voir la capture en taille normale
Ce qu'on veut :
stocker (entrée - sortie) dans 1 variable (1 colonne de 1 ligne de BdD) un ensemble de variables booléennes = le Profil de d'un Objet.
ex :
- le profil d'un étudiant qui est inscrit dans 0-31 cursus.
- le profil d'une voiture qui peut avoir jusqu'à 63 options ou aucune

Comment on fait ? on passe par une série de conversions
en entrée : N Booléens, 1 Numérique
en sortie : 1 numérique, 1 Binaire, N String mis en forme  
On a seulement besoin du catalogue des options (ici pour la simplicité, un array)

Source

  • Private arrayProfil() As String = {"Las Vegas", "Russe", "modestie", "géographie", "médecine", "PHP", "Humour", "VTT"}
  • Private nbOptions As Integer = arrayProfil.Length
  • Private longProfil As ULong = 0
  • ' ===== 1) On affiche le catalogue des BOOLEENS :
  • Sub Form_Load (...)
  • Dim i As Integer
  • Dim top As Integer = 10
  • Dim c As ULong = 1
  • Dim chb As CheckBox
  • For i = 0 To UBound(arrayProfil)
  • chb = New CheckBox
  • chb.Tag = c
  • chb.Text = arrayProfil(i)
  • chb.Top = top
  • chb.Left = 10
  • top += chb.Height
  • ' attention au dépassement de capacité !
  • If i < nbOptions - 1 Then c *= 2
  • Controls.Add(chb)
  • Next
  • End Sub
  • ' ===== 2) On capte le profil NUMERIQUE :
  • Sub Profil_in(...)
  • longProfil = 0
  • Dim ctl As Control
  • Dim chb As CheckBox
  • ' profil = somme des CheckBox.Checked
  • For Each ctl In Controls
  • If TypeOf ctl Is CheckBox Then
  • chb = ctl
  • If chb.Checked Then longProfil += CType(chb.Tag, ULong)
  • End If
  • Next
  • ' et là, on enregistre le profil dans 1 colonne de SQLServer (bigint) ou Access (Long) ...
  • End Sub
  • ' ===== 3) On Affiche le profil STRING :
  • Sub Profil_out(...)
  • ' ok, on a extrait de la BdD le Profil (longProfil) du sujet en question ...
  • Dim Sujet As String = "Marcel TCHCONST"
  • Dim strProfil As String = ""
  • Dim binProfil As String = ""
  • ' Conversion NUMERIQUE > BINAIRE :
  • binProfil = CBinaire(longProfil)
  • If longProfil = 0 Then
  • MsgBox("ne s'intéresse à rien !", 16, Sujet)
  • Exit Sub
  • End If
  • ' Conversion BINAIRE > BOOLEEN > STRING :
  • For i = 1 To nbOptions
  • strProfil &= IIf(CBool(Mid(binProfil, i, 1)), arrayProfil(i - 1) & ", ", "")
  • Next
  • ' mise en forme sophisticated :
  • ' cad: remplacement des derniers caractères par "." et remplacement de la dernière virgule par "et" :
  • Dim ToTrim() As Char = {",", " "}
  • strProfil = strProfil.Trim(ToTrim) & "."
  • Dim pos_virgule As Integer = InStrRev(strProfil, ",")
  • If pos_virgule Then
  • strProfil = Mid(strProfil, 1, pos_virgule - 1) & " et" & Mid(strProfil, pos_virgule + 1)
  • End If
  • MsgBox("est champion de : " & vbCr & strProfil, 64, Sujet)
  • End Sub
  • ' ===== La Conversion en Binaire :
  • Private Function CBinaire(ByVal _Val As ULong) As String
  • Dim strBin As String = ""
  • Dim invBin As String = ""
  • ' 1) Convertir en binaire :
  • Do
  • Try
  • strBin = (_Val Mod 2).ToString & strBin
  • _Val \= 2
  • Catch ex As OverflowException
  • MsgBox(ex.Message)
  • End
  • End Try
  • Loop Until _Val = 0
  • ' 2) compléter à gauche avec des Zéros :
  • strBin = strBin.PadLeft(nbOptions, "0")
  • ' 3) et inverser :
  • Return StrReverse(strBin)
  • End Function
Private arrayProfil() As String = {"Las Vegas", "Russe", "modestie", "géographie", "médecine", "PHP", "Humour", "VTT"}
Private nbOptions As Integer = arrayProfil.Length
Private longProfil As ULong = 0

' ===== 1) On affiche le catalogue des BOOLEENS :
Sub Form_Load (...) 
    Dim i As Integer
    Dim top As Integer = 10
    Dim c As ULong = 1
    Dim chb As CheckBox
    For i = 0 To UBound(arrayProfil)
        chb = New CheckBox
        chb.Tag = c
        chb.Text = arrayProfil(i)
        chb.Top = top
        chb.Left = 10
        top += chb.Height 
        ' attention au dépassement de capacité !
        If i < nbOptions - 1 Then c *= 2
        Controls.Add(chb)
    Next
End Sub

' ===== 2) On capte le profil NUMERIQUE :
Sub Profil_in(...) 
    longProfil = 0
    Dim ctl As Control
    Dim chb As CheckBox 
    ' profil = somme des CheckBox.Checked
    For Each ctl In Controls
        If TypeOf ctl Is CheckBox Then
            chb = ctl
            If chb.Checked Then longProfil += CType(chb.Tag, ULong)
        End If
    Next
    ' et là, on enregistre le profil dans 1 colonne de SQLServer (bigint) ou Access (Long) ... 	
End Sub

' ===== 3) On Affiche le profil STRING :
Sub Profil_out(...)
    ' ok, on a extrait de la BdD le Profil (longProfil) du sujet en question ... 	
    Dim Sujet As String = "Marcel TCHCONST"
    Dim strProfil As String = ""
    Dim binProfil As String = ""
    ' Conversion NUMERIQUE > BINAIRE :
    binProfil = CBinaire(longProfil)
    If longProfil = 0 Then
        MsgBox("ne s'intéresse à rien !", 16, Sujet)
        Exit Sub
    End If
    ' Conversion BINAIRE > BOOLEEN > STRING : 
    For i = 1 To nbOptions
        strProfil &= IIf(CBool(Mid(binProfil, i, 1)), arrayProfil(i - 1) & ", ", "")
    Next
    ' mise en forme sophisticated :
    ' cad: remplacement des derniers caractères par "." et remplacement de la dernière virgule par "et" :
    Dim ToTrim() As Char = {",", " "}
    strProfil = strProfil.Trim(ToTrim) & "."
    Dim pos_virgule As Integer = InStrRev(strProfil, ",") 
    If pos_virgule Then
        strProfil = Mid(strProfil, 1, pos_virgule - 1) & " et" & Mid(strProfil, pos_virgule + 1)
    End If
    MsgBox("est champion de : " & vbCr & strProfil, 64, Sujet)
End Sub

' ===== La Conversion en Binaire :
Private Function CBinaire(ByVal _Val As ULong) As String
        Dim strBin As String = ""
        Dim invBin As String = ""
        ' 1) Convertir en binaire :
        Do
            Try
                strBin = (_Val Mod 2).ToString & strBin
                _Val \= 2
            Catch ex As OverflowException
                MsgBox(ex.Message)
                End
            End Try
        Loop Until _Val = 0
        ' 2) compléter à gauche avec des Zéros :
        strBin = strBin.PadLeft(nbOptions, "0")
        ' 3) et inverser :
        Return StrReverse(strBin)
    End Function

 Conclusion

On pourrait utiliser une propriété Profil de type String en concaténant des 1 et des 0.
Faut juste savoir que pour SQL Server ou Access, 1 ligne d'un profil de 63 options occupe 128 octets pour un type String et seulement 8 octets pour un type ULong.
Maintenant, la question n'est pas : on fait comment au delà de 63 options = on utilise un catalogue supplémentaire.
La question est : comment on note toutes ces options en 1 fois ?
TCHCONST


 Sources du même auteur

Source avec une capture Source .NET (Dotnet) USER CONTROL POUR UN HISTOGRAMME À BARRES VERTICALES
Source avec une capture Source .NET (Dotnet) HISTOGRAMME - SUITE - GRAPHIQUE DE BARRES VERTICALES POUR UN...
Source .NET (Dotnet) HISTOGRAMME (BIS) BARRES VIA DATATABLE 100 % PERSONNALISÉ
Source avec une capture Source .NET (Dotnet) AFFICHER UN HISTOGRAMME PERSONNALISÉ

 Sources de la même categorie

Source avec Zip FONCTIONS PRATIQUE POUR LISTVIEW par Galactus13
Source avec une capture Source .NET (Dotnet) HISTOGRAMME - SUITE - GRAPHIQUE DE BARRES VERTICALES POUR UN... par tchconst
Source .NET (Dotnet) HISTOGRAMME (BIS) BARRES VIA DATATABLE 100 % PERSONNALISÉ par tchconst
Source avec une capture Source .NET (Dotnet) AFFICHER UN HISTOGRAMME PERSONNALISÉ par tchconst
Source avec Zip COMMANDLINE FACILE. par bitshifter

 Sources en rapport avec celle ci

NOMBRE PREMIER OU COMPOSÉ par apexinfo
SQLMANIPS par scn68100
Source avec Zip Source avec une capture ADO_DATA_VIEW CONNEXION ET MANIPULATION DE BASES DE DONNÉES ... par Multiprise
Source .NET (Dotnet) CODE DE CONNEXION VB.NET ET SQLSERVER par aminaovitch
Source avec Zip Source avec une capture Source .NET (Dotnet) CALC'BOOL LA CALCULETTE BOOLÉENNE par dheroux

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Base de registre [ par Steph21 ] J'aimerai extraire de la base de registre une donnée binaire. J'ai trouvé sur ce site comment le faire avec d'autres types de données mais pas avec du Calcul binaire [ par kequo ] peut on faire du calcul binaire avec VB? si oui comment Ecriture dans un fichier binaire avec la methode getchunk du controle inet [ par Yves ] Lorsque je mets les données récupérées avec getchunk dans une variable pour les sauvegarder dans un fichier binaire,VB ajoute deux octets (a chaque éc MSComm en binaire [ par OCh ] L'aide en ligne donne un exemple de lecture binaire du port serie quine fonctionne pas:dim buffer as variantdim Arr( ) as bytebuffer=MSComm1.InputArr= Cryptage de fichiers executables [ par Clovis ] Salut! Voila mon pb, j'ai fait un logiciel de cyptage, il code bien les fichiers texte, mais quand on passe aux fichiers executables ou meme aux image Binaire [ par funny ] recherche une formule pour changer les decimales en Binaire Conversion Ascii ou Hex en Binaire [ par FOX ] Bonjour,existe t-il une fonction pour convertir des données Ascii ou Héxadecimal en Binaire. Ou quelqu'un à t-il déja un dico de conversion.Mercisebas ACCES BINAIRE (AIDEZ MOI !!!!!) [ par flint(levrai!!!) ] sltcomment faire pour "puter" un octet sur un byte précis en accés binaire ?mercibye Copier/Coller un fichier binaire d'un ListView vers le presse-papier [ par Schum ] Je cherche à faire ce qui est marqué dans le titre.Je ne vois pas comment... HELP ME masque binaire en VB [ par Rurouni ] bonjoury a t il moyen de faire un masque binaire en VB?Y a des fonctions qui font ca?Merci


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,354 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales