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 6 et antérieur Discussion :

Pourquoi la Function Replace ne donne pas le bon résultat pour ce cas d’utilisation


Sujet :

VB 6 et antérieur

  1. #1
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut Pourquoi la Function Replace ne donne pas le bon résultat pour ce cas d’utilisation
    Salut

    Je ne comprends pas et ne parviens pas à savoir pourquoi la Function Replace ne donne pas le bon résultat pour ce cas d’utilisation.
    Sur un Form un Label(LabInfosImg) Wordwrap = True, suffisament grand pour 2 lignes, un CommonDialog(CommonDialog1) et activer la reference à Microsoft Shell Controls and Automation
    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
    Private Sub Form_Load()
    CommonDialog1.ShowOpen
    If Err.Number <> 0 Then Exit Sub
    LabInfosImg.Caption = InformationsFichier(CommonDialog1.FileName, CommonDialog1.FileTitle)
    End Sub
     
    Private Function InformationsFichier(CheminFich As String, Fichier As String) As String
    'necessite d'activer reference Microsoft Shell Controls and Automation
    Dim Chemin As String
    Chemin = Left(CheminFich, Len(CheminFich) - Len(Fichier))
    Dim objShell As Shell
    Dim objFolder As Folder
    Dim strFileName As FolderItem
    Dim T as Integer
     
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.NameSpace(Chemin)
    Set strFileName = objFolder.Items.IteM(Fichier)
    InformationsFichier = Fichier & vbCrLf
    If objFolder.GetDetailsOf(strFileName, 1) <> "" Then
     InformationsFichier = InformationsFichier & Trim(objFolder.GetDetailsOf(strFileName, 1))
    End If
    If objFolder.GetDetailsOf(strFileName, 31) <> "" Then
     Dim Extrat As String
     Extrat = Trim(objFolder.GetDetailsOf(strFileName, 31))
     MsgBox Extrat '"?120 x ?90"
     'pourquoi sa ne fonctionne pas?, mystère
     'Extrat = Replace(Extrat, "?", "")
     'Extrat = Replace(Extrat, Chr(63), "")
     'Extrat = Replace(CStr(Extrat), Chr(63), "")
     'Extrat = Replace(Extrat, Chr(63), "", , , vbTextCompare)
     'Extrat = Replace(Extrat, Chr(63), "", , , vbBinaryCompare)
     ' en désespoir de cause
     Dim recompo As String
     For T = 1 To Len(Extrat)
      If Asc(Mid(Extrat, T, 1)) <> 63 Then recompo = recompo & Mid(Extrat, T, 1)
     Next T
     InformationsFichier = InformationsFichier & " - " & recompo
    End If
    Set objShell = Nothing: Set objFolder = Nothing: Set strFileName = Nothing
    End Function
    Est-ce que sur d’autres OS autres que VISTA et Windows 2K le problème est identique ?
    Je rate quelque chose ?

    Motif de l'edit:
    Declaration de la variable T.
    Erreur pour l'information des OS, VISTA et XP, sous Windows 2K GetDetailsOf(strFileName, 31) n'existe pas.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Une question :
    à quoi correspond l'item 31 de GetDetailsOf ?
    Dans la doc je n'ai trouvé de référence qu'aux valeurs 0-4,-1

  3. #3
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Désolé,
    je n'avais pas vu ton édit.
    Ton problème est donc résolu ?

  4. #4
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour ProgElecT,

    J'ai fait un Form ,avec un Label(LabInfosImg) Wordwrap = True, , un CommonDialog(CommonDialog1) et activer la reference à Microsoft Shell Controls and Automation
    et ajouté le code dans le form load, puis la fonction InformationsFichier.
    Et un essai...

    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
     
    ...
    Stop  ' ici avant la condition
    If objFolder.GetDetailsOf(strFileName, 31) <> "" Then  '31
     Dim Extrat As String
     Extrat = Trim(objFolder.GetDetailsOf(strFileName, 31))
     Stop ' ici pour vérifier le passage dans la condition et
            ' voir la valeur de la variable Extrat 
     Extrat = "?120 x ?90"  'changer la valeur pour être sûr d'avoir des '?
     Stop ' ici voir la valeur de la variable Extrat  et c'est bien ?120 x ?90
     
     
     Extrat = Replace(Extrat, "?", "")
     Stop ' ici pour vérifier après le 'Replace et
            ' j'ai bien comme valeur : "120 x 90"  (sans les '? )
            'moi ,ça fonctionne
    ...
    Avec VB6 ma petite entreprise
    et OS Windows XP familial pack 2

    PS:le label me donne le nom du fichier et le nombre d'octets
    Extrat avant le changement de valeur me donne la date et l'heure de création ( pour certains fichiers: par exemple *.doc et *.jpg )

    A+

  5. #5
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    Merci de vos réponses

    Déjà, je n’ai pas précisé quel type de fichier je récupère par le CommonDialog, il s’agit d’images et le objFolder.GetDetailsOf(strFileName, 31) correspond aux dimensions (hauteur et largeur en pixels).
    Le truc que je ne comprend pas est que si (comme le signal iclic) je mes la donnée "?90 x 100?" dans la variable Extrat, le Replace pour éliminer les ? fonctionne, c’est le type renvoyé par GetDetailsOf(strFileName, 31) qui doit poser problème.
    Avant la decouverte du problème, dans la fonction, je faisai comme çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     InformationsFichier = Fichier & vbCrLf _
        & Trim(objFolder.GetDetailsOf(strFileName, 1)) _
        & " - " _
        & Replace(Trim(objFolder.GetDetailsOf(strFileName, 31)), "?", "", , , vbTextCompare)
    pensant que je savais utiliser correctement la fonction Replace

    Pour DarkVader, résolut OUI, mais pas avec Replace

    Ce n’est pas très grave car je me débrouille autrement, mais je suis curieux de savoir si ce phénomène ce produit sur d’autres systèmes (hors mis le type d’OS).
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Moi, c'est le 31 qui ne fonctionne pas (XP SP2)
    J'ai essayé avec des gif, jpg, bmp : nada
    Par contre 27 (taille horizontale) et 28 (taille verticale) marchent bien

    [Edit]
    Integer ValueProperty

    0 Name
    1 Size
    2 Type
    3 Date Modified
    4 Date Created
    5 Date Accessed
    6 Attributes
    7 Status
    8 Owner
    10 Title
    11 Subject
    12 Category
    13 Pages
    14 Comment
    15 Copyright
    16 Artist
    17 Album Title
    18 Year
    19 Track Number
    20 Genre
    21 Duration
    22 Bit Rate
    23 Protected
    24 Camera Model
    25 Date Picture Taken
    26 Dimensions
    27 Horizontal Image Size
    28 Vertical Image Size
    29 Episode Name
    30 Program Description
    32 Audio Sample Size
    33 Audio Sample Rate
    34 Channels
    35 Company
    36 Description
    37 File Version
    38 Product Name
    39 Product Version
    40 Keywords
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Pour l'image, avec
    Sur un Form un Label(LabInfosImg)
    j'avais compris 8)

    Sinon, avec XP SP1, comme pour Thierry: retour vide, même avec un bmp
    par contre avec -1, la description retourne bien la taille.

    Edit:
    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
    Private Sub Form_Load()
        CommonDialog1.ShowOpen
        If Err.Number <> 0 Then Exit Sub
        InformationsFichier CommonDialog1.FileName, CommonDialog1.FileTitle
    End Sub
     
    Private Function InformationsFichier(CheminFich As String, Fichier As String) As String
    'necessite d'activer reference Microsoft Shell Controls and Automation
        Dim Chemin As String, ret As String, i As Long
     
        Chemin = Left(CheminFich, Len(CheminFich) - Len(Fichier))
        Dim objShell As Shell
        Dim objFolder As Folder
        Dim strFileName As FolderItem
     
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.NameSpace(Chemin)
        Set strFileName = objFolder.Items.Item(Fichier)
     
        For i = 1 To 50
            ret = objFolder.GetDetailsOf(strFileName, i)
             Me.Print i, ret
        Next
        Set objShell = Nothing: Set objFolder = Nothing: Set strFileName = Nothing
    End Function
    donnerait plutôt les items 26/27/28

  8. #8
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 175
    Points
    17 175
    Par défaut
    En fait Shell.Application et ces objets ne réagit pas toujours de la même façon d’une plate forme à une autre.
    Mon besoin faisant parti d’un programme d’imagerie, avec GDI+, je me suis décidé à déclencher une récupération par cette DLL.
    La fonction que j’ai soumis été une routine que j’utilise depuis un certain temps, mais pour la première fois sous VISTA.
    Sujet clos pour ma part, merci à tous les intervenants.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    .../...
    Sujet clos pour ma part, merci à tous les intervenants.
    Dommage, pour une fois qu'il y a un peu d'animation sur le forum

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

Discussions similaires

  1. requete SQL qui ne donne pas le bon résultat?
    Par siho90 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/01/2011, 18h01
  2. Macro NB.SI ne donne pas le bon résultat
    Par argaz01 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/06/2010, 18h21
  3. Fonction Estnull et Rechdom ne donne pas le bon résultat
    Par Amstra dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/01/2010, 14h19
  4. Requêt avec sum ne donne pas le bon résultat§
    Par _cece dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/11/2008, 18h53
  5. Mon site ne donne pas un bon résultat avec firefox
    Par beegees dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 14/08/2007, 16h46

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