Obtenir les listes de fichiers et dossiers des serveurs FTP

Le client FTP doit obtenir la liste des fichiers et dossiers du dossier courant sur le serveur. Elle doit contenir autant d’informations que possible : date, taille, utilisateur, groupe, droits d’accès, etc. Ces éléments apparaissent dans le panneau, où vous pouvez les manipuler. La liste provient du texte brut reçu du serveur FTP, conçu pour être lu par une personne plutôt que pour une analyse automatique. Presque chaque serveur a donc son propre format de liste, selon son système d’exploitation, sa langue, etc., et le client doit gérer de nombreux formats.

Un type de serveur est défini pour chaque format de liste. Il contient une condition de détection automatique, une liste des colonnes de données disponibles avec leur visibilité dans le panneau et un analyseur de la liste brute. Tous les types définis apparaissent dans Configuration/Serveurs. Ajoutez-en ou modifiez-les dans la boîte Edition du type de serveur.

Vous pouvez choisir de détecter automatiquement le type de serveur ou d’en sélectionner un. Voir l’option Type de serveur dans la boîte Options avancées.

Obtenir les listes de fichiers et dossiers avec un type de serveur indiqué

Le type indiqué sert à analyser la liste brute. Si l’analyse réussit, elle produit la liste des fichiers et dossiers. Sinon, le plugin affiche un avertissement et seulement le texte brut dans le panneau, inutilisable pour les opérations.

Le dossier « . », s’il figure dans la liste, et le dossier « .. », s’il s’agit de la liste de la racine, sont retirés. Lorsqu’il reste dans la liste, « .. » est toujours visible : son attribut caché est ignoré.

Obtenir les listes de fichiers et dossiers avec détection automatique du type de serveur

Tous les types définis sont essayés successivement. Pour chacun, la condition de détection est évaluée. Si elle est fausse, le type est ignoré et le suivant essayé. Si elle est vraie, le type sert à analyser la liste brute. En cas de succès, l’analyse produit la liste des fichiers et dossiers ; sinon, le type est ignoré et le suivant essayé.

Si aucun type n’a permis l’analyse, les types ignorés en raison de leur condition de détection sont essayés successivement. Chacun sert à analyser la liste brute. En cas de succès, l’analyse produit la liste des fichiers et dossiers ; sinon, le type est ignoré et le suivant essayé.

Si tous les types définis échouent, le plugin affiche un avertissement et seulement le texte brut dans le panneau, inutilisable pour les opérations.

Le type est détecté uniquement sur la première liste du serveur, puis réutilisé pour les suivantes, afin de garder les mêmes colonnes même dans les listes vides. Si une liste ne peut pas être analysée avec ce type, le plugin tente d’en détecter un autre.

Le dossier « . », s’il figure dans la liste, et le dossier « .. », s’il s’agit de la liste de la racine, sont retirés. Lorsqu’il reste dans la liste, « .. » est toujours visible : son attribut caché est ignoré.

Syntaxe de l’analyseur

Un commentaire de ligne commence par « # » et se termine au caractère de fin de ligne.

Chaque règle commence par « * » et finit par « ; ». Le nombre de règles est illimité. Une règle se compose de fonctions séparées par « , ».

Une fonction se compose de son nom, de « ( », de sa liste de paramètres et de « ) ». La liste complète des fonctions figure plus bas sur cette page.

Les paramètres sont séparés par « , ». Ce sont des expressions.

Une expression est un identifiant de colonne, une variable d’état, une constante ou une opération binaire. L’opération binaire suit la forme habituelle : first_operand operation_symbol second_operand. Chaque opérande peut être un identifiant de colonne, une variable d’état ou une constante.

Un identifiant de colonne se compose du caractère « < », du nom de l’identifiant et du caractère « > ».

Les listes complètes des variables d’état et des symboles d’opération figurent plus bas sur cette page.

Une constante est une chaîne, un nombre ou un booléen.

Une chaîne est entourée de guillemets doubles (caractères '"') et tient sur une seule ligne. Les séquences d’échappement commencent par '\'. Sont prises en charge : "\\" pour '\', "\"" pour '"', "\t" pour une tabulation, "\r" et "\n" pour les caractères de fin de ligne CR et LF. Les autres séquences provoquent une erreur de syntaxe.

Un nombre est composé de chiffres décimaux. Un nombre négatif commence par « - » ; un nombre positif peut commencer par « + », qui est facultatif.

Un booléen est « true » ou « false », à écrire sans guillemets.

Colonnes

Chaque colonne possède un nom d’identifiant, un type de valeurs, une valeur vide, un nom et une description à afficher dans le panneau, ainsi qu’un alignement. Le nom d’identifiant est utilisé dans l’identifiant de colonne pour lui affecter des valeurs. Chaque colonne ne peut contenir qu’une valeur par élément, fichier ou dossier. Sans affectation, la valeur vide définie est utilisée. La colonne peut être visible ou non dans le panneau ; seules les colonnes de type Nom et Extension sont toujours visibles. Elles sont définies dans la boîte Edition de colonne.

Les types de colonnes suivants sont disponibles :

TypeDescription
Nomchaîne ; nom de fichier ou dossier ; exactement une colonne de ce type est requise et elle ne peut être masquée ; sa valeur vide n’a pas de sens ; l’analyseur doit lui affecter une valeur pour chaque fichier et dossier ; sans affectation, l’analyse par la règle actuelle n’ajoute aucun fichier ni dossier, pour ignorer les lignes vides et autres parties inutiles de la liste brute ; affecter la chaîne vide ("") est une erreur d’analyse
Extensionchaîne ; extension de fichier ; valeurs générées automatiquement depuis la colonne de type Nom ; ne peut être masquée ; sa valeur vide n’a pas de sens
Taille du fichier en octetsentier non signé de 64 bits ; taille en octets ; vaut zéro et s’affiche « DIR » pour les dossiers ; la valeur vide par défaut est zéro
Date de dernière écrituredate ; date de dernière écriture ou modification ; doit être valide, sinon elle est remplacée par le 1er janvier 1602 ; la valeur vide par défaut est le 1er janvier 1602
Heure de dernière écritureheure ; heure de dernière écriture ou modification ; la valeur vide par défaut est 0:00:00
Type de fichierchaîne ; description du type de fichier définie par Windows pour les extensions ; valeurs générées automatiquement depuis la colonne de type Nom ; sa valeur vide n’a pas de sens
Texte quelconquechaîne ; usage général ; la valeur vide par défaut est la chaîne vide ("")
Date quelconquedate ; usage général ; doit être valide, sinon remplacée par le 1er janvier 1602 ; la valeur vide par défaut est la chaîne vide (""), ce qui signifie que rien ne s’affiche dans le panneau si aucune valeur n’est affectée
Heure quelconqueheure ; usage général ; la valeur vide par défaut est la chaîne vide (""), ce qui signifie que rien ne s’affiche dans le panneau si aucune valeur n’est affectée
Nombre quelconqueentier signé de 64 bits ; usage général ; la valeur vide par défaut est la chaîne vide (""), ce qui signifie que rien ne s’affiche dans le panneau si aucune valeur n’est affectée

Il existe aussi trois colonnes virtuelles dont les identifiants sont <is_dir>, <is_hidden> et <is_link>. Leurs valeurs booléennes indiquent respectivement « cet élément est-il un dossier ? » (false signifie fichier), « cet élément est-il caché ? » (false signifie sans attribut caché) et « cet élément est-il un lien ? » (false signifie que non). Il n’est pas nécessaire de leur affecter des valeurs : leurs valeurs vides sont « est un fichier », « n’est pas caché » et « n’est pas un lien ».

Syntaxe de la condition de détection automatique

La condition de détection automatique est une expression logique. Ses opérateurs sont, par priorité décroissante, NOT, AND et OR. NOT (négation logique) est unaire ; AND (conjonction) et OR (disjonction) sont binaires. L’expression peut contenir des sous-expressions entre parenthèses. Les fonctions suivantes servent d’opérandes :

FonctionDescription
syst_contains(string)renvoie true uniquement si la réponse à la commande FTP SYST, qui obtient le type de système d’exploitation du serveur, contient la chaîne indiquée, sans tenir compte de la casse
welcome_contains(string)renvoie true uniquement si le premier message du serveur contient la chaîne indiquée, sans tenir compte de la casse
reg_exp_in_syst(regular_expression_string)renvoie true uniquement si la réponse à la commande FTP SYST, qui obtient le type de système d’exploitation du serveur, contient une chaîne correspondant à l’expression régulière indiquée, sans tenir compte de la casse
reg_exp_in_welcome(regular_expression_string)renvoie true uniquement si le premier message du serveur contient une chaîne correspondant à l’expression régulière indiquée, sans tenir compte de la casse

Analyse

L’analyse réussit si la liste brute est entièrement parcourue avec les règles définies.

La position actuelle dans la liste est appelée le pointeur. Pendant l’analyse, il avance du début à la fin de la liste.

Une règle ne peut être utilisée que si toutes ses fonctions réussissent, si la chaîne vide n’est pas affectée à la colonne de type Nom (une chaîne non vide ou aucune valeur peut l’être) et si le pointeur atteint la fin d’une ligne de la liste. Après l’utilisation d’une règle, le pointeur est toujours placé au début de la ligne suivante.

Pendant son évaluation, une fonction peut déplacer le pointeur et affecter ou modifier les valeurs des colonnes.

L’analyseur peut contenir autant de règles que nécessaire. Elles sont essayées dans l’ordre de définition : la première règle utilisable est toujours appliquée.

La liste peut être incomplète si l’utilisateur annule son transfert ou en cas de panne réseau. Elle est alors tronquée pour ne conserver que les lignes complètes.

L’analyse d’une liste incomplète est gérée au niveau des règles. Dans le cas simple, les règles déplacent le pointeur jusqu’à la fin de la liste incomplète, ce qui termine l’analyse avec succès. Sinon, une fonction de la règle actuelle devrait déplacer le pointeur à la ligne suivante, mais cela est impossible car la liste est incomplète. L’analyse se termine alors avec succès, comme si les lignes parcourues par la règle actuelle ne figuraient pas dans la liste incomplète.

Tailles de fichiers prises en charge

Le plugin gère les tailles en octets et en blocs. Affectez la taille à la colonne Taille du fichier en octets si elle est en octets, ou à une colonne de type Nombre quelconque portant le nom standard « Blocks » ou « BlkSize ». Ainsi, la taille totale en octets ou blocs s’affiche dans la ligne d’informations lorsque vous sélectionnez un groupe de fichiers.

Fonctions d’analyse

Sauf indication contraire, une fonction est supposée toujours réussir, ne pas déplacer le pointeur et n’affecter aucune valeur aux colonnes. Si elle déplace le pointeur, celui-ci est supposé ne pas pouvoir franchir la fin de ligne pour passer à la suivante, sauf indication contraire.

Avant d’utiliser un identifiant de colonne dans une expression, il faut affecter une valeur à cette colonne. Sinon, l’expression n’a pas de sens : elle pourrait être remplacée par la constante booléenne calculée avec la valeur vide par défaut de la colonne.

Remarque : dans le tableau suivant, un espace blanc désigne un espace ou une tabulation.

Les fonctions d’analyse suivantes sont disponibles :

FonctionDescription
if(expression)le résultat de l’expression (paramètre expression) doit être booléen ; la fonction réussit si ce résultat est true
assign(<column>, expression)le type du résultat de l’expression (paramètre expression) doit correspondre au type des valeurs de la colonne (paramètre <column>) ; affecte le résultat de l’expression à la colonne
skip_white_spaces()saute tous les espaces blancs à la position du pointeur ; place le pointeur après eux, s’il y en a
skip_to_number()place le pointeur sur le chiffre décimal le plus proche
white_spaces()saute tous les espaces blancs à la position du pointeur ; réussit uniquement si le pointeur se déplace
white_spaces(number)saute une chaîne contenant le nombre indiqué d’espaces blancs (paramètre number) à la position du pointeur et place celui-ci après elle ; réussit uniquement si cette chaîne existe
white_spaces_and_line_ends()saute tous les espaces blancs et caractères de fin de ligne à la position du pointeur ; réussit uniquement si le pointeur se déplace et n’atteint pas la fin de la liste, c’est-à-dire si un caractère suit les espaces blancs et fins de ligne
rest_of_line()place le pointeur en fin de ligne ; réussit uniquement si le pointeur se déplace
rest_of_line(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte une chaîne commençant à la position du pointeur et finissant avant la fin de ligne ; place le pointeur en fin de ligne ; réussit uniquement si le pointeur se déplace
word()saute tous les caractères sauf les espaces blancs et fins de ligne ; réussit uniquement si le pointeur se déplace
word(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte la chaîne allant du pointeur au premier espace blanc ou caractère de fin de ligne exclu ; place le pointeur après cette chaîne ; réussit uniquement si le pointeur se déplace
number(<column>)la colonne (paramètre <column>) doit contenir des entiers ; lui affecte le nombre décimal commençant au pointeur ; ce nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement si le nombre existe, se termine correctement et n’est pas négatif si la colonne est de type Taille du fichier en octets
positive_number(<column>)la colonne (paramètre <column>) doit contenir des entiers ; lui affecte le nombre décimal positif commençant au pointeur ; si le nombre est négatif, affecte la valeur vide par défaut, zéro pour Taille du fichier en octets et chaîne vide pour Nombre quelconque ; le nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement si le nombre existe et se termine correctement
number_with_separators(<column>, string) la colonne (paramètre <column>) doit contenir des entiers ; lui affecte un nombre décimal commençant au pointeur et contenant des séparateurs de groupes de chiffres pour faciliter la lecture des grands nombres ; le paramètre string définit les séparateurs autorisés, tous sauf les chiffres décimaux, « + » et « - » ; le nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement si le nombre existe, se termine correctement et n’est pas négatif si la colonne est de type Taille du fichier en octets
month_3(<column>)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le mois représenté par trois lettres au pointeur ; reconnaît les noms de mois en anglais, allemand, norvégien et suédois ; le nom doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nom ; réussit uniquement si le mois est reconnu et si tous les noms de mois de la liste sont dans la même langue
month_3(<column>, string)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le mois représenté par trois lettres au pointeur ; utilise les noms du paramètre string, composé de douze noms de trois lettres séparés par des espaces, par exemple « jan feb mar apr may jun jul aug sep oct nov dec » en anglais ; le nom doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nom ; réussit uniquement si le nom figure dans la chaîne
month_txt(<column>)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le mois représenté par son nom au pointeur ; reconnaît les noms de mois dans plusieurs langues, actuellement l’allemand ; le nom doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nom ; réussit uniquement si le mois est reconnu et si tous les noms de mois de la liste sont dans la même langue
month_txt(<column>, string)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le mois représenté par son nom au pointeur ; utilise les noms du paramètre string, composé de douze noms séparés par des espaces, par exemple « Jan. Feb. März Apr. Mai Juni Juli Aug. Sept. Okt. Nov. Dez. » en allemand ; le nom doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nom ; réussit uniquement si le nom figure dans la chaîne
month(<column>)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le mois représenté par un nombre décimal au pointeur ; ce nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement si le nombre est compris entre 1 et 12
day(<column>)la colonne (paramètre <column>) doit contenir des dates ; lui affecte le jour représenté par un nombre décimal au pointeur ; ce nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement si le nombre est compris entre 1 et 31
year(<column>)la colonne (paramètre <column>) doit contenir des dates ; lui affecte l’année représentée par un nombre décimal au pointeur ; ce nombre doit être suivi d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après le nombre ; réussit uniquement pour un nombre de 0 à 999 (ajoute 2000 entre 0 et 79, et 1900 entre 80 et 999 ; par exemple 107 donne 2007) ou de 1602 à 9999
time(<column>)la colonne (paramètre <column>) doit contenir des heures ; lui affecte les heures, minutes et éventuellement secondes et millisecondes décimales au pointeur ; formats reconnus : 00:00, 00:00:00 et 00:00:00.000 ; les suffixes « a », « am », « p » ou « pm » sont interprétés comme matin ou après-midi et l’heure est corrigée en conséquence ; la valeur doit être suivie d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ou d’un chiffre ; place le pointeur après la valeur ; réussit uniquement si l’heure est valide, dans les plages 0-23, 0-59, 0-59 et 0-999
year_or_time(<column_date>, <column_time>) les colonnes (paramètres <column_date> et <column_time>) doivent contenir une date et une heure ; affecte l’année et éventuellement l’heure (heures et minutes uniquement), représentées au pointeur par un nombre décimal pour l’année ou deux nombres séparés par « : » pour l’heure ; suit le format Unix standard : si une année est présente, l’heure est inconnue ; si une heure est présente, l’année est calculée selon la date actuelle pour que la date complète ne remonte pas à plus de six mois ; les nombres doivent être suivis d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après la valeur ; réussit uniquement si l’année ou l’heure est valide, dans les plages 1602-9999 et 0-23:0-59
all(number)saute le nombre indiqué de caractères (paramètre number) et place le pointeur après eux ; réussit uniquement si tous ces caractères ont été sautés
all(<column>, number)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte une chaîne commençant au pointeur et contenant le nombre indiqué de caractères (paramètre number) ; place le pointeur après elle ; réussit uniquement si cette chaîne existe
all_to(string)trouve la première occurrence de la chaîne indiquée (paramètre string), sans tenir compte de la casse, et place le pointeur après elle ; réussit uniquement si la chaîne est trouvée
all_to(<column>, string)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte la chaîne allant du pointeur à la fin de la première occurrence de la chaîne indiquée (paramètre string), sans tenir compte de la casse ; place le pointeur après la chaîne trouvée ; réussit uniquement si elle est trouvée
all_up_to(<column>, string)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte la chaîne allant du pointeur au début de la première occurrence de la chaîne indiquée (paramètre string), sans tenir compte de la casse ; place le pointeur après la chaîne trouvée ; réussit uniquement si elle est trouvée
unix_link(<is_dir>, <column_name>, <column_link>)les colonnes <column_name> et <column_link> doivent être de types Nom et Texte quelconque ; traite une chaîne allant du pointeur à la fin de ligne exclue, puis place le pointeur après elle ; attend le format Unix « link_name -> target_name » ou « link_name » si la cible est inaccessible ; extrait le nom du lien et éventuellement sa cible, puis détermine s’il pointe vers un fichier ou un dossier : si le nom ou la cible contient une extension, c’est probablement un fichier, sinon un dossier ; si cette heuristique ne convient pas, ajoutez par exemple « assign(<is_dir>,false) » après unix_link ; affecte le nom du lien à <column_name>, la cible à <column_link> si elle est connue, et true à la colonne virtuelle <is_dir> s’il s’agit d’un lien vers un dossier ; réussit uniquement si le format est correct et ne commence pas par un espace blanc
unix_device(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; lui affecte une chaîne au pointeur contenant deux nombres décimaux séparés par « , » et plusieurs espaces, par exemple « 27, 26 » ; elle doit être suivie d’un séparateur courant (virgule, point, point-virgule, deux-points, etc.), d’un espace blanc ou d’une fin de ligne, jamais d’une lettre ; place le pointeur après elle ; réussit uniquement si elle est trouvée
add_string_to_column(<column>, expression) la colonne (paramètre <column>) et le résultat de l’expression (paramètre expression) doivent être de type chaîne ; ajoute le résultat de l’expression à la colonne
cut_white_spaces_end(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; retire les espaces blancs en fin de chaîne dans la colonne et y affecte la nouvelle chaîne
cut_white_spaces_start(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; retire les espaces blancs en début de chaîne dans la colonne et y affecte la nouvelle chaîne
cut_white_spaces(<column>)la colonne (paramètre <column>) doit contenir des chaînes ; retire les espaces blancs au début et à la fin de la chaîne dans la colonne et y affecte la nouvelle chaîne
back(number)recule le pointeur du nombre indiqué de caractères (paramètre number) ; réussit uniquement si ce déplacement est possible, sans pouvoir remonter à la ligne précédente
cut_end_of_string(<column>, number)la colonne (paramètre <column>) doit contenir des chaînes ; retire le nombre indiqué de caractères (paramètre number) en fin de chaîne et affecte la nouvelle chaîne à la colonne ; réussit uniquement si la chaîne d’origine comptait au moins number caractères

Variables d’état utilisées pour l’analyse

Les variables d’état suivantes sont disponibles :

VariableDescription
first_nonempty_linebooléen ; vaut true uniquement si le pointeur se trouve sur la première ligne non vide, c’est-à-dire contenant autre chose que des espaces blancs
last_nonempty_linebooléen ; vaut true uniquement si le pointeur se trouve sur la dernière ligne non vide, c’est-à-dire contenant autre chose que des espaces blancs ; ne tient pas compte du caractère complet ou incomplet de la liste
next_charchaîne contenant le caractère au pointeur ; vide si le pointeur est à la fin de la liste
next_wordchaîne allant du pointeur au premier espace blanc ou caractère de fin de ligne exclu
rest_of_linechaîne allant du pointeur à la fin de ligne exclue

Opérateurs utilisés pour l’analyse

Avant d’utiliser un identifiant de colonne dans une expression, il faut affecter une valeur à cette colonne. Sinon, l’expression n’a pas de sens : elle pourrait être remplacée par la constante booléenne calculée avec la valeur vide par défaut de la colonne.

Les opérateurs suivants sont disponibles :

OpérateurDescription
==égalité ; comparaison des chaînes sensible à la casse
!=inégalité ; comparaison des chaînes sensible à la casse
eqégalité de chaînes ; réservé aux chaînes ; comparaison insensible à la casse
not_eqinégalité de chaînes ; réservé aux chaînes ; comparaison insensible à la casse
inrecherche de sous-chaîne ; vaut true uniquement si la sous-chaîne (opérande gauche) est dans la chaîne (opérande droit) ; comparaison insensible à la casse
not_invaut true uniquement si la sous-chaîne (opérande gauche) n’est pas dans la chaîne (opérande droit) ; comparaison insensible à la casse
end_withvaut true uniquement si la chaîne (opérande gauche) finit par la sous-chaîne (opérande droit) ; comparaison insensible à la casse
not_end_withvaut true uniquement si la chaîne (opérande gauche) ne finit pas par la sous-chaîne (opérande droit) ; comparaison insensible à la casse

Voir aussi

Configuration/Serveurs
Boîte Edition du type de serveur
Boîte Edition de colonne
Boîte Test d’analyse

From the Sally manual (GPL-2.0-or-later), © 1997-2023 Open Salamander Authors; © 2025-2026 Elias Bachaalany. Source: manual source (zip) · original page in the Sally repository