0

Substring avec apostrophe

Bonjour,

j'aimerais traiter une chaîne substr comprenant un champ Ordre dans une table Mots et transformer la chaîne "l'appel de l'ange" en "AA"

j'ai essayé :

"L'appel de l'ange"

"L\'appel de l\'ange"

mais ça ne marche pas. Sans effet.

mon script est avec un bouton.

Mon script :

for rec in select Mots where Ordre = "l'appel de l'ange" 
do
    rec.(Ordre := "AA")
end

for rec in select Mots where Ordre = "L\'appel de l\'ange"
do
    rec.(Ordre := "AA")
end

 

merci pour votre aide

5 replies

null
    • Ninox developper
    • Jacques_TUR
    • 2 days ago
    • Reported - view

    Bonjour . Cela devrait fonctionner normalement. Vous pouvez essayer avec « like » à la place de «=«  mais je pense que le problème viens d’ailleurs. Avez vous une table de test à partager ?

    • Alain_Fontaine
    • 2 days ago
    • Reported - view

    Cela doit fonctionner sans les « backlashes », mais pas avec. Je vois qu’il y a parfois « l majuscule », et parfois « l minuscule ». Faut choisir… D’autre part, il faut qu’il y ait partout le même type d’apostrophe.

      • Ninox developper
      • Jacques_TUR
      • 2 days ago
      • Reported - view

       a raison, c’est sûrement dû à une différence de type d’apostrophe. Une solution, si vous n’êtes pas sûr de maîtriser quel type d’apostrophe sera utilisé, serait d’appliquer une fonction de nettoyage.

      "— Déclare une fonction qui supprime toute ponctuation
         (hors lettres accentuées, chiffres, espaces)
         puis met le texte en MAJUSCULES —";
      function cleanText(t : text) do
          "Étape 1 : on retire les caractères indésirables";
          let txt := replacex( t, "[^0-9A-Za-zÀ-ÖØ-öø-ÿ ]", "" );
      
          "Étape 2 : on met le résultat en majuscules";
          upper(txt);
      end;
      
      "— Données d’exemple —";
      var a := "L'appel de l'ange";
      var b := "l`APPEL de l`ange";
      
      "— Comparaison après nettoyage (renvoie true) —";
      cleanText(a) = cleanText(b);
      • Hubert_Follic
      • yesterday
      • Reported - view

        

      merci de la promptitude et du contenu des réponses.

      j'ai identifié l'origine de mon erreur. Il y avait des blancs derrière ma chaine de caractères que je n'avais pas traitée. J'ai essayé la fonction Trim mais non reconnue. Il fallait la déclarer.

      Alors j'ai utilisé le code suivant avec substring qui ne portait que sur le début de ma chaîne.

      for rec in select Mots where substr(Ordre, 0, 7) = "L'appel" do
          rec.(Ordre := "AA")
      end
      cela a fonctionné.

      je ne suis pas un pro de la programmation.

      J'apprécie Ninox et les informations du forum et du support sont précieuses  Je m'améliore !

      Merci

      • Ninox developper
      • Jacques_TUR
      • yesterday
      • Reported - view

       Heureux de savoir que vous avez trouvé une solution.

      S’il vous manque des fonctions comme trim, pour retirer tous les blancs, ou startsWith, pour tester si une chaîne correspond bien au début d’une autre, vous pouvez créer des fonctions globales qui vous serviront par la suite. Voici les deux exemples en question :

      "Déclare deux variables de texte :";
      var a := "L'appel de l'ange";
      var b := "l'APPEL";
      
      "Fonction qui retire tous les espaces d'une chaîne de caractères :";
      function removeSpace(value : text) do
         replace(value, " ", "");
      end;
      
      "Fonction qui vérifie si la chaîne 'value' commence par la chaîne 'begin' :";
      function startWith(value : text, begin : text) do
         debug("a"); "Affiche 'a' dans le journal de debug, utile pour tester la fonction.";
         substr(value, 0, length(begin)) = begin;
      end;
      
      "Appel des fonctions : supprime les espaces des deux textes, les met en majuscules puis vérifie si 'a' commence par 'b' :";
      startWith(upper(removeSpace(a)), upper(removeSpace(b)));