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

POWER Discussion :

[Power Query] Encodege Hexa vers Caractères spéciaux (Sharepoint liste)


Sujet :

POWER

  1. #1
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 101
    Par défaut [Power Query] Encodege Hexa vers Caractères spéciaux (Sharepoint liste)
    Salut

    J'importe une liste Sharepoint via Power Query.
    Sharepoint utilise un encodage des caractères spéciaux dans les noms de champs. C'est le code Hexa du caractère enficher dans une chaine remarquable. Par exemple Espace à pour valeur Hexa 20, Sharepoint remplace les Espace par _x0020_.

    [Edit]
    Le but serait d'isoler la partie numérique pour ensuite faire la conversion.
    Les noms ressemblent à ça "Date_x0020_de_x0020_r_x00e9_alis", il peut y avoir plusieurs caractères spéciaux par nom.

    Je voudrais autant que possible éviter d'avoir un tableau de conversion
    [/Edit]

    J'ai bien tenter Chat GPT mais les code qu'il me sort soit plante, soit ne font pas le job.

    Quelqu'un aurait-il une solution pour remettre les caractères en lieu est place des codes implantés par Sharepoint?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 101
    Par défaut
    Salut

    En guidant ChatGPT sur une logique de split, convertion, join le résultat est mieux

    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
    //Code créé par Chat GPT avec un peu d'aide pour le guider 
    //Et ce site pour Expression.Evaluate trouvé dnas les commentaires https://blog.crossjoin.co.uk/2018/09/23/converting-decimal-numbers-to-hexadecimal-in-power-query-m/
    //Il permet de remplacer les codes _x0000_ par l'équivalent unicod
    let
        Fct_SP_Car_Hexa_To_String = (originalName as text) as text =>
        let
            Parts = Text.Split(originalName, "_x"),
            Transformed = List.Transform(Parts, each
                if Text.Length(_) >= 5 and Text.Range(_, 0, 4) = Text.Select(Text.Range(_, 0, 4), {"0".."9", "a".."f", "A".."F"}) then
                    Character.FromNumber(Expression.Evaluate("0x" & Text.Range(_, 0, 4))) & Text.Range(_, 5)
                else
                    _
            ),
            Result = Text.Combine(Transformed, "")
        in
            Result
    in
        Fct_SP_Car_Hexa_To_String
    ChatGPT sort quand même souvent des fonctions qui sont sensées être native mais qui n'existe pas au final.
    Ou des utilisation de fonctions qui ne sont pas correct. Il voulait par exemple utiliser Number.FromText("0x0026"), sauf que ça ne fonctionne pas, j'ai trouvé le contournement sur le site Chris Webb's, dans un commentaire qui proposait l'utilisation de Expression.Evaluate

    Merci à ceux qui auront prit le temps de me lire
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 276
    Par défaut
    Bonjour

    le temps de me plonger dans la question ce matin il y a quelques minutes que ChatGPT me devance lorsque je veux poster ma réponse

    je propose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    = Text.Combine(
          List.Transform(
            Text.Split([un champ texte], "_"), 
            each if Text.StartsWith(_, "x") and Text.Length(_)=5
              then (try Character.FromNumber(Number.From(Text.End(_,4))) otherwise _)
              else _))
    Stéphane

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 101
    Par défaut
    Salut

    Je te remercie pour cette proposition.
    J'ai intégré ton code mais il y a un soucis, le split étant fait à partit de "_", j'ai des noms de champs qui intègrent des underscores et ceux-ci ne doivent pas être remplacer.

    J'aurai voulu modifier en remplaçant par "_x" mais ça ne fonctionnera pas dans la suite, même,en testant si la chaine commence par "0", le fait de couper par "_" permettait d'avoir uniquement la valeur hexa et il n'est donc pas possible de tester si la longueur vaut 4, puisque du texte reste accroché à la suite.

    Peut-être en testant si 0 au début et "_" au 5ème caractère, je vais regarder

    [Edit]
    J'ai tenté ça mais il ne replace pas comme il faut et j'ai du mal avec le débogage des expression dans Power Query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    = (originalName as text) as text =>
        let
            Result = Text.Combine(
            List.Transform(
                Text.Split(originalName, "_x"), 
                each if Text.StartsWith(_, "0") and Text.Middle(_,5,1)="_" then (
                    try Text.Replace(_,  Text.Start(_,5),Character.FromNumber(Expression.Evaluate("0x" & Text.Start(_,4)))) otherwise _
                ) else _
            ))
        in
            Result
    J'ai découpé en partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let
        Source = "0020_de",
        Cara = Character.FromNumber(Expression.Evaluate("0x" & Text.Start(Source,4))),
        Modif = Text.Replace(Source, Text.Start(Source,5),Cara)
    in
        Modif
    Et là ça fonctionne...

    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 276
    Par défaut
    Je n'ai pas le temps de faire des tests maintenant mais la fonction Text.Middle commence à l'index 0. Donc pour le _ en 5eme position c'est Text.Middle(_,4,1)="_".
    Stéphane

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 101
    Par défaut
    Salut

    Bien vu, c'était le soucis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    let
        Fct_SP_Car_Hexa_To_String_Raccourcix = (originalName as text) as text =>
        let
            Result = Text.Combine(
            List.Transform(
                Text.Split(originalName, "_x"), 
                each if Text.StartsWith(_, "0") and Text.Middle(_,4,1)="_" then (
                    Text.Replace(_,  Text.Start(_,5),Character.FromNumber(Expression.Evaluate("0x" & Text.Start(_,4))))
                ) else _
            ))
        in
            Result
    in
        Fct_SP_Car_Hexa_To_String_Raccourcix
    Je te remercie, du coup je vais utiliser ce code ci, intelligence humaine n'est pas encore morte

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. API SharePoint Listes
    Par issou dans le forum C#
    Réponses: 2
    Dernier message: 11/10/2007, 14h08
  2. Sharepoint List et BDD
    Par placebomuse dans le forum SharePoint
    Réponses: 6
    Dernier message: 04/07/2007, 15h57
  3. Conversion hexa vers double
    Par EnigmuS dans le forum C
    Réponses: 13
    Dernier message: 16/05/2007, 14h06
  4. Infopath 2007 - Sharepoint List
    Par mschoum dans le forum InfoPath
    Réponses: 1
    Dernier message: 19/03/2007, 15h39
  5. [PIC 16F84] Conversion source hexa vers asm
    Par Page35 dans le forum Autres architectures
    Réponses: 2
    Dernier message: 08/12/2005, 22h12

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