Suite

Utiliser un caractère générique pour représenter un nombre spécifique de caractères dans ArcPy ?


J'ai un tas de classes d'entités qui sont étiquetées dans ce modèle

CL25_E6_5_4_3

CL266_E6_5_4

CL266_E6_5_4_2

CL4_E6_5

Je souhaite créer une liste dans ArcPy qui contient toutes les classes d'entités avec le même nombre de caractères après le E (ex nombre de caractères après *E). Ainsi, dans cet exemple, seules les classes d'entités appelées CL25_E6_5_4_3 et CL266_E6_5_4_2 seraient incluses dans la liste (car elles ont le même nombre de caractères après le E) qui seront éventuellement utilisées pour réunir les classes d'entités répertoriées.

Existe-t-il un symbole générique qui ne représente qu'un seul caractère (Ex : CL266_E??????? représenterait 7 caractères après CL266_E) ou existe-t-il un moyen de récupérer un nombre de caractères après un point dans le nom (Ex CL266_Elen()) ou spécifiez le nombre de caractères à inclure dans le caractère générique (CL266_E[0:6])?

Je n'ai pas d'expérience avec python, mais j'essaie juste de trouver des idées.


La méthode ListFeatureClasses prend en charge un caractère générique, mais je ne pense pas que ce soit votre meilleure option. Je commencerais par une liste vide et j'ajouterais les classes d'entités conformes par longueur et sous-chaîne :

import sys, os, arcpy InWorkspace = sys.argv[1] # où trouver les classes d'entités arcpy.env.workspace = InWorkspace # important pour ListFeatureClasses ConformingFeatClasses = list() # une nouvelle liste vide pour ThisFC dans arcpy.ListFeatureClasses() : IndexOfE = ThisFC.upper().find("E") # renvoie -1 si aucun 'E' trouvé si IndexOfE > 0 : # la chaîne contient un 'E' # Les caractères après 'E'est la longueur de la chaîne soustraire le index du premier 'E' AfterE = len(ThisFC) - IndexOfE if AfterE == 7: ConformingFeatClasses.append(ThisFC) # pour utiliser la liste… pour ThisFC dans ConformingFeatClasses: FullPath = os.path.join(InWorkspace,ThisFC) # faire quelque chose avec FullPath

Alternativement, vous pouvez regarderstring.split('E')qui renvoie une liste de chaînes brisées pour chaque 'E' - Je ne sais pas si 'E' est récurrent donc je ne l'ai pas fait de cette façon… mais cela fonctionnerait si vous êtes sûr qu'il n'y a qu'un seul 'E' dans le chaîne de caractères.

S'il existe littéralement des milliers de classes d'entités, vous pouvez obtenir une augmentation des performances en utilisant un caractère générique :

import sys, os, arcpy InWorkspace = sys.argv[1] # où trouver les classes d'entités arcpy.env.workspace = InWorkspace # important pour ListFeatureClasses ConformingFeatClasses = list() StartWild = "CL266_E" pour ThisFC dans arcpy.ListFeatureClasses(StartWild + "*") : if len(ThisFC) == 14 et ThisFC[0:len(StartWild)].upper() == StartWild : ConformingFeatClasses.append(ThisFC) # pour utiliser la liste… pour ThisFC dans ConformingFeatClasses : FullPath = os.path.join(InWorkspace,ThisFC) # faire quelque chose avec FullPath

Notez que les deux méthodes répertorient uniquement les classes d'entités dans un espace de travail, qui est un dossier pour les fichiers de formes et pour les géodatabases fichier/personnelles, seules les classes d'entités autonomes (pas dans un jeu de classes d'entités) seront renvoyées. Il existe bien sûr des moyens d'obtenir toutes les classes d'entités dans une géodatabase ou tous les fichiers de formes dans tous les sous-dossiers, mais leur fonctionnement est très différent. J'aurais besoin de savoir pour quel cas coder, sinon cela deviendrait très déroutant.

Méthode de comptage des traits de soulignement (en quelque sorte) :

import sys, os, arcpy InWorkspace = sys.argv[1] # où trouver les classes d'entités arcpy.env.workspace = InWorkspace # important pour ListFeatureClasses ConformingFeatClasses = list() # une nouvelle liste vide pour ThisFC dans arcpy.ListFeatureClasses() : ESplit = ThisFC.split("_") # divise la chaîne en sous-chaînes pour chaque '_' # len(list) renvoie le nombre d'éléments dans la liste # compte effectivement le nombre de traits de soulignement à moins que la # chaîne ne se termine par un trait de soulignement if len(ESplit) == 5: ConformingFeatClasses.append(ThisFC) # pour utiliser la liste… pour ThisFC dans ConformingFeatClasses : FullPath = os.path.join(InWorkspace,ThisFC) # faire quelque chose avec FullPath

Les cordes peuvent être de longueurs différentes dans ce cas, mais toujours conformes au motif.


vous pouvez également utiliser la longueur de vos noms avec la compréhension de liste

newlist = [nom pour le nom dans la première liste si len(nom)==12 ]

ou alors

newlist = [nom pour le nom dans la première liste si len(name.split("_"))==5 ]

Utilisation de la cartographie du système d'information géographique dans la gestion des urgences : élargir le rôle des infirmières dans les soins primaires à domicile

Le programme de soins primaires à domicile de la Veterans Health Administration (VHA-HBPC) sert les vétérans atteints de maladies chroniques complexes. La gestion des urgences est une préoccupation pour les programmes VHA-HBPC. La cartographie du système d'information géographique (SIG) a été mise en œuvre pour les opérations du programme local dans 30 emplacements. Une évaluation a évalué la cartographie SIG en tant qu'outil de gestion des urgences, y compris les expériences des infirmières de première ligne et des infirmières chefs de file. Les rôles des infirmières comprenaient la création et l'utilisation de cartes pour la préparation et l'intervention. Les cartes ont fourni des informations précieuses, y compris les emplacements des patients vulnérables (par exemple, dépendant d'un ventilateur), les ressources d'urgence de la communauté et les menaces environnementales (par exemple, un ouragan). La volonté des infirmières d'adopter cette nouvelle technologie et cet ensemble de compétences était notable.

Mots clés: Gestion des urgences Système d'information géographique (SIG) Soins primaires à domicile Évaluation de la mise en œuvre Soins infirmiers Vétérans Populations vulnérables.

Copyright © 2019 Elsevier Inc. Tous droits réservés.

Déclaration de conflit d'intérêts

Divulgation Ce projet de cartographie a été financé par les initiatives stratégiques et transformationnelles de la gériatrie et des soins prolongés de l'administration des anciens combattants (V22.E16.691-4). Les auteurs n'ont aucun conflit d'intérêts à divulguer. Le contenu de cet article ne représente pas le point de vue du ministère des Anciens Combattants ou du gouvernement des États-Unis.


Propriétés

Offre la possibilité d'obtenir ou de définir les paramètres par défaut de l'appareil photo pour une carte.

La modification de la caméra par défaut n'affectera pas les vues existantes. Cette propriété n'est appliquée que lorsqu'un nouveau MapView est ouvert ou qu'un nouveau MapFrame est inséré dans une mise en page.

Utilisé conjointement avec ConvertWebMapToArcGISProject dans un outil Web d'impression de carte Web pour renvoyer une vue cartographique à imprimer ou à exporter.

Renvoie une valeur de chaîne qui rapporte les informations de type de l'objet Map. Si la carte est en 2D, la carte est renvoyée. Si la carte est en 3D, SCENE est renvoyé.

Renvoie une valeur de chaîne qui représente les unités de carte définies pour Map .

Obtenez ou définissez les informations de classe de métadonnées de la carte. Notez que la définition des métadonnées dépend de la valeur de la propriété isReadOnly.

Fournit la possibilité d'obtenir ou de définir le nom de l'objet Map tel qu'il apparaît dans la table des matières ainsi que le nom réel de l'élément dans une mise en page.

Fournit la possibilité d'obtenir ou de définir l'échelle de référence pour la carte . Pour effacer l'échelle de référence, définissez la valeur sur 0,0

Fournit la possibilité d'obtenir ou de définir la SpatialReference associée à la carte.


Q. Comment fonctionne l'astérisque (*) dans une recherche ?

L'astérisque est couramment utilisé caractère générique symbole qui élargit une recherche en trouvant des mots commençant par les mêmes lettres. Utilisez-le avec des radicaux de mots distinctifs pour récupérer les variations d'un terme avec moins de frappe.

Dans de nombreuses bases de données, un caractère générique n'est plus nécessaire pour trouver des variations qui sont formées en ajoutant simplement des "s"s (par exemple, professeur trouve souvent soit professeur ou alors enseignants). Le caractère générique est cependant très utile lorsque vous souhaitez récupérer des variantes plus complexes. Dans la recherche ci-dessous, motivation* trouvera motiver, motive, motivation, motivation, etc., et enfant* trouvera enfants aussi bien que enfant.

Consultez l'aide en ligne de la base de données pour identifier les caractères génériques valides pour des ressources spécifiques. Par exemple:

  • instruire * trouve instruire, instruit, instructeur, etc., dans la plupart des bases de données et OneSearch
  • informatique ! trouve calculer, calcule, ordinateur, calcul, etc., dans la base de données Nexis Uni
  • femme ? m trouve femme ou alors femmes dans la plupart des bases de données et OneSearch

Liens et fichiers

Médias


Renvoie le nom de l'ensemble de données de la table tel qu'il apparaît dans l'espace de travail, et non dans la table des matières.

Renvoie le chemin de la source de données de la table. Il inclut le workspacePath et le datasetName combinés.

Fournit la possibilité d'obtenir ou de définir la requête de définition d'une table.

Permet de définir ou d'obtenir le nom d'une table tel qu'il apparaîtrait dans la table des matières d'ArcMap. Des espaces peuvent être inclus.

Renvoie True si la source de données d'une table est rompue.

Renvoie un chemin vers l'espace de travail ou le fichier de connexion de la table.


Guide du développeur de recherche — Chapitre 21

Ce chapitre décrit les recherches avec caractères génériques dans MarkLogic Server. Les sections suivantes sont incluses :

Caractères génériques dans MarkLogic Server

Les recherches de caractères génériques permettent à MarkLogic Server de renvoyer des résultats qui correspondent à des combinaisons de caractères et de caractères génériques. Les recherches avec caractères génériques ne sont pas simplement des correspondances exactes de chaînes, mais sont basées sur la correspondance de modèles de caractères entre les caractères spécifiés dans une requête et les mots dans les documents qui contiennent ces modèles de caractères. Cette section décrit les caractères génériques et comprend les rubriques suivantes :

Caractères génériques

MarkLogic Server prend en charge deux caractères génériques : * et ? .

Par exemple, il* correspondra à n'importe quel mot commençant par lui, comme il , elle , aide , bonjour , hélicoptère , etc. D'un autre côté, lui ? ne correspondra qu'aux mots de trois lettres commençant par he , tels que hem , hen , et ainsi de suite.

Règles pour les recherches génériques

Les règles de base pour les recherches avec caractères génériques dans MarkLogic Server sont les suivantes :

    Il peut y avoir plusieurs caractères génériques dans un même terme ou expression de recherche, et les deux caractères génériques peuvent être utilisés en combinaison. Par exemple, m*??? correspondra aux mots commençant par m avec trois caractères ou plus. Les espaces sont utilisés comme coupures de mots et la correspondance avec des caractères génériques ne fonctionne qu'à l'intérieur d'un seul mot. Par exemple, m*th* correspondra à la méthode mais ne s'y rencontrera pas. Si le caractère générique * est spécifié seul dans une requête de valeur (par exemple, cts:element-value-query, cts:element-value-match), il correspond à tout (s'étendant sur les coupures de mots). Par exemple, * correspondra à la valeur meet me there . Si le caractère générique * est spécifié avec un caractère non générique, il correspondra aux requêtes de lexique de valeur (par exemple, cts:element-value-match), mais ne correspondra pas aux requêtes de valeur (par exemple, cts:element-value- mettre en doute). Par exemple, m* correspondra à la valeur meet me there pour une recherche de lexique de valeur (par exemple, cts:element-value-match) mais ne correspondra pas à la valeur d'une recherche de requête de valeur (par exemple, cts:element-value- requête), car la requête de valeur ne correspond qu'à un seul mot. Une recherche de valeur pour m* * correspondra à la valeur (car m* correspond au premier mot et * correspond à tout ce qui le suit). Si "wildcarded" est explicitement spécifié dans l'expression cts:query, alors la recherche est effectuée en tant que recherche wildcard. Si ni "wildcarded" ni "unwildcarded" n'est spécifié dans l'expression cts:query, la configuration de la base de données et le texte de la requête déterminent le caractère générique. Si la base de données a des index génériques activés ( recherches à trois caractères , recherches à deux caractères , recherches à un caractère ou recherches à caractère générique de fin ) et si le texte de la requête contient l' un des caractères génériques ? ou * , alors les caractères génériques sont traités comme des caractères génériques et la recherche est effectuée « générique » . Si aucun des index génériques n'est activé, les caractères génériques sont traités comme de la ponctuation et la recherche est effectuée sans caractère générique (à moins que « caractère générique » ne soit spécifié dans l'expression cts:query). Si la requête a l'option sensible à la ponctuation, la ponctuation est traitée comme des caractères de mot pour les recherches avec caractères génériques. Par exemple, une recherche avec caractères génériques sensibles à la ponctuation pour d*benz correspondrait à daimler-benz . Si la requête a l'option sensible aux espaces, alors les espaces sont traités comme des caractères de mot. Cela peut être utile pour faire correspondre les espaces dans les requêtes de valeur générique. Vous pouvez également utiliser l'option sensible aux espaces dans les requêtes de mots génériques, bien que cela puisse ne pas avoir beaucoup de sens, car elle correspondra plus que ce à quoi vous pourriez vous attendre.
  • Vous pouvez uniquement effectuer des correspondances avec des caractères génériques contre les propriétés JSON avec des valeurs de texte (chaîne). Les nombres, les booléens, les valeurs nulles sont indexés séparément dans JSON. Pour plus de détails, consultez Création d'index et de lexiques sur des documents JSON dans le Guide du développeur d'applications.

Activation des recherches avec caractères génériques

Les recherches de caractères génériques utilisent des index de caractères, des lexiques et des index de caractères génériques de fin pour accélérer les performances. Pour vous assurer que les recherches de caractères génériques sont rapides, vous devez activer au moins un index de caractères génériques (recherches de trois caractères, recherches de caractères génériques de fin, recherches de deux caractères et/ou recherches d'un caractère) et des recherches de caractères d'élément rapides (si vous voulez des recherches rapides dans des éléments spécifiques ) dans l'écran de configuration de la base de données de l'interface d'administration. Les recherches avec caractères génériques sont désactivées par défaut. Si vous activez les index de caractères, vous devez prévoir d'allouer un espace disque supplémentaire d'environ trois fois la taille du contenu source.

Cette section décrit les sujets suivants :

Spécification de caractères génériques dans les requêtes

Si des index génériques sont activés pour la base de données, vous pouvez contrôler davantage l'utilisation des caractères génériques au niveau de la requête. Vous pouvez utiliser des caractères génériques avec n'importe laquelle des fonctions de niveau feuille MarkLogic cts:query, telles que cts:word-query, cts:element-word-query et cts:element-value-query . Pour plus de détails sur les fonctions cts:query, consultez Composition d'expressions cts:query. Vous pouvez utiliser les options de requête "wildcarded" et "unwildcarded" pour activer ou désactiver explicitement les caractères génériques dans les fonctions du constructeur cts:query. Voir le Référence des fonctions MarkLogic XQuery et XSLT pour plus de détails.

Si vous laissez l'option générique non spécifiée et que des index génériques sont activés, MarkLogic Server effectuera une requête générique si * ou ? est présent dans la requête. Par exemple, la fonction de recherche suivante :

entraînera une recherche générique. Par conséquent, tant que des index génériques sont activés dans la base de données, vous n'avez pas besoin d'activer explicitement les caractères génériques pour effectuer des recherches avec des caractères génériques.

Lorsque l'indexation générique est activée dans la base de données, le système offrira également des performances plus élevées pour fn:contains , fn:matches, fn:starts-with et fn:ends-with pour la plupart des expressions de requête.

Si les index de caractères, les lexiques et les index génériques de fin sont tous désactivés dans une base de données et que les caractères génériques sont explicitement activés dans la requête (avec l'option "wildcarded" du constructeur de niveau feuille cts:query), la requête s'exécutera, mais peut nécessiter beaucoup de traitement. De telles requêtes seront rapides si elles sont très sélectives et n'ont besoin d'effectuer les recherches génériques que sur une quantité relativement faible de contenu, mais peuvent prendre beaucoup de temps si elles doivent réellement filtrer les résultats d'une grande quantité de contenu.

Paramètres d'index de caractères génériques recommandés

Pour activer tout type de fonctionnalité de requête générique avec une bonne combinaison de performances et de taille de base de données, MarkLogic vous recommande d'activer les paramètres d'index suivants :

    recherches de mots recherches de mots à trois caractères positions des mots lexique des mots dans le classement des points de code positions des mots à trois caractères

Cette combinaison fournira des requêtes génériques précises et rapides pour une grande variété de recherches génériques, y compris les recherches génériques de début et de fin. Si vous ajoutez l'index de recherche de caractères génériques de fin, vous obtiendrez des recherches de caractères génériques de fin légèrement plus efficaces, mais avec une taille de base de données accrue.

Si vous n'avez besoin que de caractères génériques pour des éléments XML, des attributs XML, des propriétés JSON ou des champs spécifiques, vous devriez envisager d'utiliser un lexique de mots d'élément ou de champ au lieu d'un lexique de mots général. Cela peut améliorer la vitesse et la précision de la correspondance des caractères génériques. Envisagez cette option si vous effectuez principalement des recherches avec caractères génériques à l'aide des types de requêtes suivants ou leur équivalent :

Comprendre les index génériques

Vous configurez les paramètres d'index au niveau de la base de données, à l'aide de l'interface d'administration ou des API d'administration (XQuery, JavaScript côté serveur ou REST). Pour plus d'informations sur la configuration des paramètres de base de données et sur d'autres index de texte, consultez Paramètres de base de données et indexation de texte dans le Guide de l'administrateur.

Les paramètres de base de données suivants peuvent affecter les performances et la précision des recherches avec caractères génériques. Pour plus de détails, voir Comprendre les paramètres d'index de texte dans le Guide de l'administrateur.

    élément de lexiques de mots, attribut d'élément et lexiques de mots de champ. (Utilisez un lexique de mots d'élément pour une propriété JSON). trois recherches de caractère , deux recherches de caractère ou une recherche de caractère . Vous n'avez pas besoin de rechercher un ou deux caractères si la recherche à trois caractères est activée. positions de mots à trois caractères recherches de caractères génériques de fin , positions de mots génériques de fin , recherches de caractères génériques de fin d'élément rapide recherches de caractères d'élément rapides

L'index de recherche à trois caractères combiné au lexique des mots offre les meilleures performances pour la plupart des requêtes, et l'index de recherche rapide de caractères d'élément est utile lorsque vous soumettez des requêtes d'élément. Les index de recherche à un et deux caractères ne sont utilisés que si vous soumettez des recherches avec caractères génériques qui essaient de ne correspondre qu'à un ou deux caractères et que vous n'avez pas la combinaison d'un lexique de mots et de l'index de recherche à trois caractères. Étant donné que les recherches à un et deux caractères renvoient généralement un grand nombre de correspondances, elles peuvent ne pas justifier les compromis entre l'espace disque et le temps de chargement.

Si vous avez activé l'index de recherche à trois caractères et les index à deux et un caractère désactivés, et si vous n'avez pas de lexique de mots, il est toujours possible d'émettre une requête générique qui recherche une racine de deux ou un caractère (par exemple, ab* ou a* ) ces recherches sont autorisées, mais ne seront pas rapides. Si vous disposez d'une interface utilisateur de recherche qui permet aux utilisateurs de saisir de telles requêtes, vous souhaiterez peut-être rechercher ces modèles de recherche génériques à deux ou un caractère et émettre une erreur, car ces recherches sans les index correspondants peuvent être lentes et gourmandes en ressources. Vous pouvez également ajouter un lexique de mots de collation de points de code à votre base de données.

Comme pour toute indexation, le choix des index à utiliser est un compromis. L'activation de plus d'index améliore les performances des requêtes, mais utilise plus d'espace disque et augmente le temps de chargement et de réindexation. Pour la plupart des environnements où les recherches avec caractères génériques sont requises, MarkLogic recommande d'activer les recherches à trois caractères et un lexique de mots de collation de points de code, mais de désactiver les recherches à un et deux caractères.

Si vous devez uniquement effectuer des recherches génériques sur des éléments, des attributs, des propriétés JSON ou des champs spécifiques, vous pouvez économiser de l'espace et potentiellement améliorer la précision en utilisant un lexique de mots d'élément, d'attribut ou de champ au lieu d'un lexique de mots général.

De plus, si vous souhaitez simplement appliquer des recherches génériques au contenu sélectionné, les champs vous permettent de laisser les index génériques désactivés au niveau de la base de données, tout en les activant au niveau des champs. Pour plus de détails, voir Comprendre les configurations de champ dans le Guide de l'administrateur.

Interaction avec d'autres fonctionnalités de recherche

Cette section décrit les interactions entre les caractères génériques, le stemming et d'autres fonctionnalités de recherche dans MarkLogic Server. Les sujets suivants sont inclus :

Wildcarding et Stemming

Les recherches par caractères génériques peuvent être utilisées en combinaison avec le radicalisme (pour plus de détails sur le radicalisme, voir Comprendre et utiliser les recherches par radical), c'est-à-dire que les requêtes peuvent effectuer des recherches par radical et des recherches par caractères génériques en même temps. Cependant, le système n'effectuera pas de recherche par radical sur les mots génériques. Par exemple, supposons une expression de recherche de running car* . Le terme running sera apparié en fonction de sa racine. Cependant, car* sera mis en correspondance sur la base d'une recherche avec caractère générique, et correspondra à car , cars , carriage , carpenter etc. ne pas revenu.

Sensibilité aux caractères génériques et à la ponctuation

La sensibilité du radical et de la ponctuation fonctionnent indépendamment l'une de l'autre. Cependant, il existe une interaction entre les caractères génériques et la sensibilité à la ponctuation. Cette section décrit cette interaction et comprend les parties suivantes :

Spécification implicite et explicite de la ponctuation

MarkLogic Server vous permet de spécifier explicitement si une requête est sensible à la ponctuation et si elle utilise des caractères génériques. Vous le spécifiez dans les options de la requête, comme dans l'exemple suivant :

Si vous incluez un caractère générique dans une recherche sensible à la ponctuation, il traitera le caractère générique comme une ponctuation. Par exemple, la requête suivante correspond à hello* , mais pas à hellothere :

Si l'option de sensibilité à la ponctuation n'est pas spécifiée, le système effectue une recherche sensible à la ponctuation s'il y a une ponctuation non générique dans les termes de la requête. Par exemple, si la ponctuation n'est pas spécifiée, la requête suivante :

entraînera une recherche sensible à la ponctuation et la requête suivante :

entraînera une recherche insensible à la ponctuation.

Si une recherche est sensible à la ponctuation (que ce soit implicitement ou explicitement), MarkLogic Server fera correspondre la ponctuation ainsi que le terme de recherche. Notez que la ponctuation n'est pas considérée comme faisant partie d'un mot. Par exemple, marquez ! est considéré comme une marque verbale à côté d'un point d'exclamation. Si une recherche est insensible à la ponctuation, la ponctuation correspondra aux espaces.

Règles d'interaction entre la ponctuation et les caractères génériques

Les personnages ? et * sont considérés comme des signes de ponctuation dans les documents chargés dans la base de données. Pourtant, ? et * sont également traités comme des caractères génériques dans une requête. Cela crée une interaction intéressante (et parfois déroutante) entre les caractères génériques et la sensibilité à la ponctuation.

Voici les règles d'interaction entre la ponctuation et les caractères génériques. Ils vous aideront à déterminer comment le système se comporte lorsqu'il y a des interactions entre la ponctuation et les caractères génériques.

    Lorsque les index génériques sont désactivés dans la base de données, toutes les requêtes sont par défaut "unwildcarded" et les caractères génériques sont traités comme de la ponctuation. Si vous spécifiez "wildcarded" dans la requête, la requête est une requête wildcard et les caractères génériques sont traités comme des jokers. Le caractère générique l'emporte (a priorité sur) la sensibilité à la ponctuation. C'est-à-dire, si le * et/ou ? des caractères sont présents dans une requête, * et ? sont traités comme des caractères génériques et non comme des signes de ponctuation, sauf si les caractères génériques sont désactivés. Si les caractères génériques sont désactivés dans la requête ( "unwildcarded" ), ils sont traités comme de la ponctuation. Si les caractères génériques et la sensibilité à la ponctuation sont tous deux explicitement désactivés et que des caractères de ponctuation (y compris * et ? ) sont présents dans la requête, ils sont traités comme des espaces. Les caractères génériques et la sensibilité à la ponctuation peuvent être activés en même temps. Dans ce cas, la ponctuation dans un document est traitée comme des caractères et les caractères génériques de la requête correspondront à n'importe quel caractère de la requête, y compris les caractères de ponctuation. Par conséquent, la requête suivante correspondra à la fois à hello* et à hellothere :
Exemples d'interactions de caractères génériques et de ponctuation

Cette section contient des exemples de sortie de requêtes dans les catégories suivantes :

Sensibilité aux caractères génériques et à la ponctuation non spécifiée (index génériques activés)

Les exemples suivants montrent des requêtes exécutées lorsqu'au moins un index générique est activé et qu'aucune option n'est explicitement définie sur le cts:word-query.

    Exemple de requête : cts:word-query("bonjour tout le monde")

Comportement réel : Caractère générique désactivé, ponctuation insensible

Correspondra à : bonjour le monde, bonjour ?! monde, bonjour ? monde! etc

Exemple de requête : cts:word-query("bonjour?monde")

Comportement réel : Caractère générique activé, ponctuation insensible

Correspondra à : helloaworld

Ne correspondra pas : bonjour monde, bonjour!monde

Exemple de requête : cts:word-query("hello*world")

Comportement réel : Caractère générique activé, ponctuation insensible

Correspondra à : helloabcworld

Ne correspondra pas : bonjour au monde, bonjour au monde

Exemple de requête : cts:word-query("bonjour * monde")

Comportement réel : Caractère générique activé, ponctuation insensible

Correspondra à : bonjour au monde, bonjour au monde

Ne correspondra pas : helloaworld , bonjour le monde , bonjour ! monde

Les espaces adjacents sont réduits pour les comparaisons de chaînes dans le serveur. Dans l'expression de requête hello * world , les deux espaces de chaque côté de l'astérisque ne sont pas réduits à des fins de comparaison, car ils ne sont pas adjacents. Par conséquent, hello world n'est pas une correspondance puisqu'il n'y a qu'un seul espace entre hello et world mais hello * world nécessite deux espaces car les espaces n'ont pas été réduits. L'expression bonjour ! le monde n'est pas non plus un match parce que ! est traité comme un espace (insensible à la ponctuation), puis les trois espaces consécutifs sont réduits en un seul espace avant la comparaison de chaînes.

Exemple de requête : cts:word-query("bonjour! monde")

Comportement réel : Caractère générique désactivé, sensible à la ponctuation

Correspondra à : Bonjour! monde

Ne correspondra pas : bonjour le monde, bonjour le monde

Exemple de requête : cts:word-query("hey! world?")

Comportement réel : Caractère générique activé, sensible à la ponctuation

Correspondra à : Hé! monde? , Hé! monde! , Hé! mondes

Ne correspondra pas : Hé. monde

Caractères génériques explicitement désactivés, sensibilité à la ponctuation non spécifiée

Les exemples suivants montrent les correspondances pour les requêtes qui spécifient "unwildcarded" et ne spécifient rien sur la sensibilité à la ponctuation.

    Exemple de requête : cts:word-query("hello?world", "unwildcarded")

Comportement réel : Caractère générique désactivé, sensible à la ponctuation

Correspondra à : Bonjour le monde

Ne correspondra pas : bonjour le monde, bonjour le monde

Exemple de requête : cts:word-query("hello*world", "unwildcarded")

Comportement réel : Caractère générique désactivé, sensible à la ponctuation

Correspondra à : Bonjour le monde

Ne correspondra pas : helloabcworld

Caractère générique non spécifié, sensibilité à la ponctuation explicitement activée (index génériques activés)

Les exemples suivants montrent des requêtes exécutées lorsqu'au moins un index générique est activé et que l'option « sensible à la ponctuation » est explicitement définie sur cts:word-query.

    Exemple de requête : cts:word-query("bonjour?monde", "sensible à la ponctuation")

Comportement réel : Caractère générique activé, sensible à la ponctuation

Correspondra à : bonjour?monde , bonjour.monde , bonjour*monde

Ne correspondra pas : bonjour le monde, bonjour ! monde

Exemple de requête : cts:word-query("hello * world", "sensible à la ponctuation")

Comportement réel : Caractère générique activé, sensible à la ponctuation

Correspondra à : bonjour abc monde, bonjour ! monde

Ne correspondra pas : Bonjour le monde

Exemple de requête : cts:word-query("bonjour ? monde", "sensible à la ponctuation")

Comportement réel : Caractère générique activé, sensible à la ponctuation

Correspondra à : Bonjour! monde , (bonjour) monde

(bonjour) le monde est un match parce que ? correspond ) et ( n'est pas considéré comme faisant partie du mot bonjour .


Un "certificat générique" est un certificat qui contient, comme nom de serveur possible, un nom qui contient un caractère " * ". Les détails sont dans la RFC 2818, section 3.1. L'essentiel : lorsque le certificat du serveur contient *.example.com , il sera accepté par les clients comme certificat valide pour tout serveur dont nom apparent correspond à ce nom.

Dans le métier de la certification des sites Web, il y a quatre acteurs principaux :

  • Le serveur SSL lui-même.
  • Le fournisseur du navigateur Web que le client utilisera.
  • L'utilisateur humain, qui contrôle dans une certaine mesure ce que le navigateur client fera.
  • L'autorité de certification qui a délivré le certificat au serveur.

Les certificats génériques n'impliquent pas de vulnérabilités supplémentaires pour le serveur SSL en effet, le serveur SSL n'a aucun intérêt à regarder son propre certificat. Ce certificat est au bénéfice des clients, pour les convaincre que la clé publique contenue dans le certificat est bien la clé publique du véritable serveur SSL. Le serveur SSL sait sa propre paire de clés publique/privée et n'a pas besoin d'en être convaincu.

L'utilisateur humain n'a aucune idée de ce qu'est une clé publique. Ce qu'il voit, c'est une icône de cadenas et, plus important encore, le nom de serveur prévu: c'est le nom à droite de " https:// " et avant le suivant " / ". Le navigateur Web est supposé de gérer les détails techniques de vérification de l'exactitude du nom, c'est-à-dire la validation du certificat du serveur, et la vérification que le nom correspond à celui qui est inscrit dans ledit certificat. Si le navigateur ne fait pas ce travail, alors il sera considéré comme bâclé et n'assumant pas son rôle, ce qui peut avoir de graves conséquences commerciales, voire juridiques. De même, l'AC est contractuellement tenue de suivre des procédures définies pour identifier les propriétaires de serveurs SSL afin que les faux certificats soient difficiles à obtenir pour les attaquants (le contrat est entre l'AC et son über-CA, récursivement, jusqu'à l'AC racine qui est elle-même liée par un pacte avec le fournisseur de l'OS ou du navigateur, qui a accepté d'inclure la clé CA racine dans l'OS ou le navigateur dans des conditions définies).

Ce que cela signifie, c'est que le navigateur et le Californie doit, en pratique, chouchouter l'utilisateur tout au long du processus de vérification. Ils sont plus ou moins tenus (par la loi ou, plus sévèrement encore, par des considérations commerciales) d'empêcher l'utilisateur de se faire escroquer par le biais de faux sites qui semblent légitimes. La limite entre le travail de l'utilisateur et le travail du navigateur/CA n'est pas clairement définie et a historiquement changé. Dans Days of Yore, je veux dire il y a environ dix ans, les navigateurs affichaient simplement l'URL brute, et c'était à l'utilisateur humain de trouver le nom du serveur. Cela a conduit les opérateurs de sites falsifiés (c'est-à-dire les "sites de phishing") à utiliser des URL techniquement valides, mais trompeuses, comme celle-ci :

Puisque les utilisateurs humains sont, eh bien, Humain, et la plupart d'entre eux lisent de gauche à droite (les cibles d'arnaque les plus riches et crédules sont toujours dans les pays occidentaux), ils commenceront à gauche, voir www.paypal.com , s'arrêter au signe deux points ("trop ​​technique") , et se faire arnaquer.

En réaction, les fournisseurs de navigateurs ont reconnu que les capacités d'analyse d'URL des utilisateurs humains ne sont pas aussi bonnes qu'on le supposait initialement, et les navigateurs récents mettent donc en évidence la partie domaine. Dans le cas ci-dessus, ce serait xcvhjvb.com , et certainement pas n'importe quoi avec paypal.com dedans. Vient maintenant la partie où certificats génériques entrer dans le jeu. Si le propriétaire de xcvhjvb.com achète un certificat générique contenant " *.xcvhjvb.com ", alors il peut configurer un site de phishing appelé :

qui sera accepté par le navigateur (il correspond au nom générique), et est toujours susceptible d'attraper les utilisateurs imprudents (et il y en a beaucoup. ). Ce nom pouvait ont été achetés par l'attaquant sans avoir recours à des caractères génériques, mais alors les employés de CA auraient vu le nom avec une tentative frauduleuse évidente (bonne CA faire une validation humaine de chaque demande de certificats, ou au moins déclencher des alertes pour les noms très longs et/ou contenant des noms de banques connus).

Donc, les certificats génériques diminuent l'efficacité des mesures de confinement de la fraude du côté de l'AC. C'est comme une signature vierge de l'AC. Si les tentatives de phishing basées sur des caractères génériques deviennent plus courantes, on peut s'attendre à ce qu'une ou plusieurs des mesures suivantes voient le jour :

  • Les navigateurs ne mettent en évidence que les parties du nom de domaine qui correspondent non générique éléments du certificat.
  • L'AC nécessite des documents et des contrats plus lourds pour les certificats génériques (et ceux-ci seront plus chers).
  • Les navigateurs désactivent complètement la prise en charge des certificats génériques.

En fait, je m'attends à ce que les trois mesures soient appliquées au cours des prochaines années. Je peux me tromper totalement (c'est le problème avec la prédiction de l'avenir) mais c'est toujours mon intuition.

Piquant, nous pouvons également souligner que les certificats génériques sont utiles pour partager la même paire de clés entre différents serveurs noms, ce qui rend plus probable que la clé privée sera partagée entre différents serveurs Machines. Les clés privées de voyage sont un risque en soi pour la sécurité, plus une clé privée circule, moins elle reste « privée ».


1 réponse 1

Si vous souhaitez éliminer la valeur 177, vous devez procéder comme suit (voir le violon ici) :

puis exécutez le SQL suivant :

Notez que le prédicat ___177% (3 traits de soulignement) récupérera ici toutes les valeurs qui ont 3 caractères (tout caractère unique) suivi de 177 suivi de tout autre caractère ou aucun.

Cela est dû à la différence entre le caractère générique % (pourcentage) et _ (trait de soulignement) - le _ signifie que l'espace réservé représente un, et précisément un caractère alors que le caractère générique % représente 0 ou plus personnages.

So, the 177 isn't picked up because it has non characters before the 177 - it's explained well here.

The != solution proposed by @Akina will also work but it implies knowing the values to be excluded in advance - my reading of your question is that you want to eliminate any really short product_id s and not just particular ones!

If you have more sophisticated requirements, you should take a look at regular expressions - an example from PostgreSQL can be found here - MySQL documentation here.


How to Use Wildcards

UNE caractère générique is a character that can be used as a substitute for any of a class of characters in a search, thereby greatly increasing the flexibility and efficiency of searches.

Wildcards are commonly used in coquille commands in Linux and other Unix-like operating systems. A shell is a program that provides a text-only user interface and whose main function is to execute commands typed in by users and display their results.

Wildcards are also used in expressions régulières and programming languages. Regular expressions are a pattern matching system that uses strings (i.e., sequences of characters) constructed according to pre-defined syntax rules to find desired strings in text.

Le terme caractère générique ou alors wild card was originally used in card games to describe a card that can be assigned any value that its holder desires. However, its usage has spread so that it is now used to describe an unknown or unpredictable factor in a variety of fields.

Star Wildcard

Three types of wildcards are used with Linux commands. The most frequently employed and usually the most useful is the star wildcard, which is the same as an asterisk (*). The star wildcard has the broadest meaning of any of the wildcards, as it can represent zero characters, all single characters or any string.

As an example, the fichier command provides information about any filesystem object (i.e., file, directory or link) that is provided to it as an argument (i.e., input). Because the star wildcard represents every string, it can be used as the argument for file to return information about every object in the specified directory. Thus, the following would display information about every object in the current directory (i.e., the directory in which the user is currently working):

If there are no matches, an error message is returned, such as *: can't stat `*' (No such file or directory).. In the case of this example, the only way that there would be no matches is if the directory were empty.

Wildcards can be combined with other characters to represent parts of strings. For example, to represent any filesystem object that has a .jpg filename extension, *.jpg would be used. Également, a* would represent all objects that begin with a lower case (i.e., small) letter une.

As another example, the following would tell the ls command (which is used to list files) to provide the names of all files in the current directory that have an .html ou un .SMS extension:

Likewise, the following would tell the rm command (which is used to remove files and directories) to delete all files in the current directory that have the string xxx in their name:

Question Mark Wildcard

The question mark (?) is used as a wildcard character in shell commands to represent exactly one character, which can be any single character. Thus, two question marks in succession would represent any two characters in succession, and three question marks in succession would represent any string consisting of three characters.

Thus, for example, the following would return data on all objects in the current directory whose names, inclusive of any extensions, are exactly three characters in length:

And the following would provide data on all objects whose names are one, two or three characters in length:

As is the case with the star wildcard, the question mark wildcard can be used in combination with other characters. For example, the following would provide information about all objects in the current directory that begin with the letter une and are five characters in length:

The question mark wildcard can also be used in combination with other wildcards when separated by some other character. For example, the following would return a list of all files in the current directory that have a three-character filename extension:

Square Brackets Wildcard

The third type of wildcard in shell commands is a pair of square brackets, which can represent any of the characters enclosed in the brackets. Thus, for example, the following would provide information about all objects in the current directory that have an x, y and/or z in them:

And the following would list all files that had an extension that begins with x, y or z:

The same results can be achieved by merely using the star and question mark wildcards. However, it is clearly more efficient to use the bracket wildcard.

When a hyphen is used between two characters in the square brackets wildcard, it indicates a range inclusive of those two characters. For example, the following would provide information about all of the objects in the current directory that begin with any letter from une par F:

And the following would provide information about every object in the current directory whose name includes at least one numeral:

The use of the square brackets to indicate a range can be combined with its use to indicate a list. Thus, for example, the following would provide information about all filesystem objects whose names begin with any letter from une par c or begin with s ou alors t:

Likewise, multiple sets of ranges can be specified. Thus, for instance, the following would return information about all objects whose names begin with the first three or the final three lower case letters of the alphabet:

Sometimes it can be useful to have a succession of square bracket wildcards. For example, the following would display all filenames in the current directory that consist of jones followed by a three-digit number:

Created July 17, 2006.
Copyright © 2006 The Linux Information Project. Tous les droits sont réservés.


2 réponses 2

The following assumptions have been made (some of them possibly repeating parts of your description):

SF / FLEX is always followed either by a number immediately or by a space character and then a number.

There is always one space character before SF / FLEX , unless the item is at the beginning of the string.

There is always a comma or a space after the number that follows SF / FLEX , unless the item is at the end of the string.

With those in mind, here is my approach:

This is the output of the above query:

And to explain some of the trickery employed by the query, this is how it works:

The original row set is cross joined with two inline views, one that represents the required prefixes ( prefix ) and one that specifies how many spaces there may be between the prefix and the subsequent number ( spaces ). This way the query will probe for all combinations of prefixes and numbers of delimiting spaces ( SF , SF , FLEX , FLEX ).

The PDescription string is searched for each combination, one after one, to calculate the starting position of the prefix. It uses PATINDEX, which, for each prefix and space number, builds its own search pattern. As per the assumptions above, PATINDEX expects a space before the prefix and at least one digit after the prefix and, possibly, a space.

So, if, for instance, the current prefix is SF and the current expected number of spaces after it is 1, the pattern would be % SF [0-9]% . To make sure there is a space before the prefix, a space is added at the beginning of PDescription .

That trick accomplishes two things: it helps to find the prefix if it is at the beginning of the string and it makes the resulting starting position accurate. The latter is important because technically the returned position would match not the prefix itself but the preceding space. So, to get the actual position of the prefix, we would need to increment the result by 1. However, because we had added a space at the beginning of the source, all the positions were shifted forward already. So, in the end, the result points exactly at the beginning of the prefix.

One final touch here is that if the returned position is 0, it is transformed into NULL by NULLIF. That helps to avoid errors about negative length values passed to SUBSTRING later.

The found position is then used in CHARINDEX to find the first comma in PDescription found after that position. Again, to make sure there est a comma, the character is appended to PDescription . The result constitutes the ending position of the sought item.

Using the obtained starting and ending positions, the item is extracted from PDescription using the SUBSTRING function.

Finally, in the SELECT clause, before actually returning the item, the query additionally checks if there is a space after the number, just in case the item was not properly delimited by a comma. By appending a space to the item, it uses the same trick as when searching for the comma position, also taking into account the length of the prefix and the expected number of spaces after the prefix to make sure the found space character will be the one après the number.

In cases where the prefix is not found in the string, Item returns NULL. Such rows, however, are excluded from the output by the WHERE clause, which specifies that the starting position be not NULL.

I am not sure if the above description is clear enough but hopefully it will help together with the code itself.


Voir la vidéo: الفرق بين ArcMap u0026 ArcCatalog in ArcGIS (Octobre 2021).