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

Scripts/Batch Discussion :

IndexOf(" ") renvoie -1 alors que j'ai des espaces ! [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut IndexOf(" ") renvoie -1 alors que j'ai des espaces !
    Bonjour,

    Je ne m'attendais pas un jour à toucher à PowerShell mais qui dit mise en place SharePoint, dit PowerShell ^^

    Bref, je viens vous voir car je ne comprend pas le comportement de la méthode IndexOf() dans mon cas :

    Dans mon code j'ai une variable de type String $objItem.cn

    Cette chaine possède deux caractères espace. Je veux relever l'index du premier et du deuxième espace.

    je fais donc quelque chose comme ca, pour afficher tout d'abord les indexs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "1er index : " + $objItem.cn.IndexOf(' ')
    "2eme index : " + $objItem.cn.LastIndexOf(' ')
    Seulement, voila, pour le premier index, il me renvoie toujours -1, signe qu'il ne trouve pas d'espace. LastIndexOf me renvoie bien le bon index sur dernier espace.

    Pour débugger un peu j'ai essayé de trouver le caractère "e" qui était présent dans pas mal d'essai, mais j'ai toujours cette valeur "-1" de retour ... j'ai également comparé les codes ASCII des espaces qui sont les mêmes.

    Soit y a un truc simple qui m'échappe soit j'ai le mauvais oeil ...

    Merci d'avance de vos réponses

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    assure-toi que le type est bien string.
    Quelle est le contenu qui pose pb ?
    Par défaut Powershell gère de l'unicode, vérifie, en dernier ressort, l'encodage côté producteur.
    As-tu testé l'usage d'une variable intermédiaire ?

  3. #3
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Salut et merci de ta réponse,

    Je pense qu'effectivement cela viens du type de ma variable. Mais LastIndexOf() réussi très bien à récupérer l'index de mon deuxième espace, donc IndexOf() n'est pas codé de la même manière j'imagine.

    GetType() sur ma variable me renvoie ca :
    System.DirectoryServices.ResultPropertyValueCollection

    Du coup j'utilise la méthode Split() qui va bien.

    Elle fonctionne parfaitement, en revanche je sais pas niveau performances ce qui serait le mieux à utiliser.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Vespiras Voir le message
    GetType() sur ma variable me renvoie ca :
    System.DirectoryServices.ResultPropertyValueCollection
    Je suppose que le transtypage implicite de Powershell induit ce comportement, le méthode Indexof existe sur la classe citée, ensuite l'opérateur + transforme le contenu de ta variable en string.
    Il faut tjr vérifier le type des objets que tu manipules, tu as peut-être confondu le rendu sur la console et le type réel.
    Citation Envoyé par Vespiras Voir le message
    Elle fonctionne parfaitement, en revanche je sais pas niveau performances ce qui serait le mieux à utiliser.
    Cela dépend du nombre d'objet à traiter.
    Tu peux essayer de tracer ton instruction avec Trace-command, consulte la doc, par contre je sais quelle source te conseiller (Get-TraceSource)...

  5. #5
    Membre expérimenté Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Par défaut
    Ok merci Laurent

    Voila pourquoi je préfère les langages compilés avec des variables typées ^^.
    Au moins on sait ou on en est.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/04/2013, 11h21
  2. Réponses: 3
    Dernier message: 30/03/2012, 13h27
  3. Réponses: 4
    Dernier message: 09/06/2010, 11h24
  4. Réponses: 1
    Dernier message: 23/01/2008, 18h04
  5. Réponses: 7
    Dernier message: 30/03/2007, 14h58

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