rechercher une sous-chaîne à partir d'une variété de chaînesJ'ai une colonne avec le nom de l'échec, qui contient toutes sortes de chaînes. J'aime rechercher un code d'erreur commençant par "ex". Le code d'erreur est une chaîne de 10 caractères commençant par "ex". Et mettez le 1er code d'erreur dans la colonne "1er code", tous les codes d'erreur dans la colonne "tous les codes". Quelle formule est définie pour les deux colonnes ? Désolé de vous déranger à nouveau. Je dois d'abord faire mon travail rapidement dans les mains fermées, puis prendre le temps d'apprendre le document d'aide JMP.

Analyse et modélisation de données de baseRe: recherche d'une sous-chaîne à partir d'une variété de chaînesCet article peut aider à extraire le code de la pièce défectueuse à partir d'une chaîne non structurée
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesVoici une façon de créer ces 2 colonnes
Formule pour le code :fst
start = contains(:Failure,"0x");
if(start>0,substr(:Failure,start,start+10),"");
Formule pour : Tous les codes
theCodes = {};;
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, start + 10 ) );
theString = Substr( theString, start + 10 );
);
concat items(theCodes, ",");Re: recherche d'une sous-chaîne à partir d'une variété de chaînesJ'apprécie vraiment votre aide opportune. Avec la formule, les codes d'erreur sont détectés mais d'autres caractères apparaissent également. Je l'ai résolu en utilisant left(). mais j'aimerais savoir pourquoi les autres caractères apparaissent là-bas ?

Re: recherche d'une sous-chaîne à partir d'une variété de chaînesSans disposer de votre table de données pour résoudre le problème, je ne suis pas sûr de la nature du problème. Essayez cette modification et voyez si elle fonctionne mieux.
start = contains(:Failure,"0x");
x="";
if(start>0,x=substr(:Failure,start,start+10),"");
x;
Re: recherche d'une sous-chaîne à partir d'une variété de chaînes@txnelson merci pour votre temps sur le sujet. J'ai réessayé, ça échoue toujours. voici le tableau de données pour votre débogage.
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesMon erreur,
La longueur de l'élément Substr doit être Start, et non Start+10.
Premier code
start = Contains( :Failure, "0x" );
If( start > 0,
Substr( :Failure, start, 10 ),
""
);
Tous les codes
theCodes = {};
theString = :Failure;
While( Contains( theString, "0x" ) > 0,
start = Contains( theString, "0x" );
Insert Into( theCodes, Substr( theString, start, 10 ) );
theString = Substr( theString, start + 10 );
);
Concat Items( theCodes, "," );Re: recherche d'une sous-chaîne à partir d'une variété de chaînesMerci mille fois!
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesS'il est possible que vous ayez des messages mélangés qui commencent par 0x mais qui ne sont pas des codes d'erreur simples, Contains pourrait fonctionner, mais d'après les exemples que vous nous avez fournis, cela ne semble pas être le cas (ou si vous avez par exemple 0x123456 qui est plus court que ce que vous avez défini comme code d'erreur).
Si tel est le cas, je me pencherais sur l'expression régulière (vous pouvez utiliser une idée similaire avec la boucle While comme Jim l'a montré avec contains). Mais vous devez avoir une bonne connaissance des caractères autorisés pour créer un modèle robuste pour une correspondance appropriée.
Re: recherche d'une sous-chaîne à partir d'une variété de chaînes@jthi merci pour vos commentaires. J'essaie d'utiliser Regex pour rechercher la sous-chaîne commençant par 0x. sur la base de votre article recommandé, c'est une bonne idée pour " Nouvelle colonne par correspondance de texte ". Je réfléchis à la manière de créer le modèle du code d'erreur (ou le code d'erreur n'est pas limité à 10 caractères). l'instruction Backreferences and Capturing Groups for Regex peut m'aider à comprendre le JSL associé, mais il m'est un peu difficile d'écrire du JSL. je pense que plus je lis d'exemples JSL, plus tôt j'apprendrai à écrire du JSL. pour revenir au sujet, pourriez-vous me rendre service de montrer le modèle Regex du code d'erreur ? par exemple dans votre message, c'est
failure_pattern = "[A-Z]+\d+[A-Z]?"
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesÉtant donné le tableau de données d'exemple que vous avez fourni, la formule pour extraire le premier code d'erreur à l'aide de la fonction Regex() est
Regex( :Failure, "[A-Z]+\d+[A-Z]?" )
La définition et les exemples de la fonction Regex() se trouvent dans l'index des scripts
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesJSL n'a peut-être pas tous les indicateurs ( Regex : ajouter des options pour tous les indicateurs , Ajouter un indicateur à Regex Match() pour trouver toutes les occurrences non superposées du motif ), mais il accepte toujours des motifs similaires. Utilisez quelque chose comme https://regex101.com/ pour tester vos modèles d'expressions régulières (si vous n'êtes pas sûr qu'ils enverront des données à un serveur, n'utilisez pas de données réelles à moins que vous ne puissiez les partager), puis essayez-les dans JSL. Des sites Web comme regex101 vous expliquent le modèle.
Je n'ai pas de définition précise de vos codes d'erreur, je ne peux donc pas fournir de bons modèles pour commencer. Je sais seulement que cela commence par 0x, mais j'aurais besoin de connaître les caractères autorisés, y a-t-il un ordre pour ces caractères autorisés et comment déterminer quand cela se termine (et la longueur s'il y en a un).
Re: recherche d'une sous-chaîne à partir d'une variété de chaînesaujourd'hui, j'ai pris le temps de lire la définition et les exemples de la fonction Regex() qui se trouvent dans l'index de script, et j'ai appris la structure du modèle Regex comme ([a-zA-Z])\s([0-9]). c'est merveilleux de partager que l'utilisation de https://regex101.com/ teste les modèles regex.
Regex() ou Regex match() est une fonction un peu compliquée. J'ai besoin de trouver plus d'exemples dans la communauté pour pratiquer l'utilisation de Regex(). Merci beaucoup pour le partage des liens.