Obtener listas de archivos y directorios de servidores FTP
El cliente FTP necesita obtener la lista de archivos y directorios del directorio actual del servidor. Debe contener toda la información posible (fecha, tamaño, usuario, grupo, permisos, etc.). Estos archivos y directorios se muestran en el panel, donde puede trabajar con ellos. La lista se obtiene del listado de texto sin formato recibido del servidor FTP. Este está diseñado para la lectura humana, no para su análisis automático. Por eso casi cada servidor tiene su propio formato de listado (según el sistema operativo, su idioma, etc.), y el cliente debe admitir muchos formatos.
Para cada formato de listado se define un tipo de servidor. Contiene una condición para detectarlo automáticamente, una lista de columnas de datos disponibles (incluido si son visibles en el panel) y un analizador del listado de texto. Todos los tipos definidos aparecen en Configuración/Servidores. Puede añadir tipos nuevos o editar los existentes en el cuadro Editar tipo de servidor.
Puede elegir si el tipo de servidor se detecta automáticamente. Si no, elija cuál se utilizará. Consulte la opción Tipo de servidor del cuadro Opciones avanzadas.
Obtener listas de archivos y directorios con un tipo de servidor especificado
El tipo de servidor especificado se utiliza para analizar el listado de texto. Si el análisis tiene éxito, produce la lista de archivos y directorios. En caso contrario, el plugin muestra un aviso y solo aparece el listado de texto en el panel (con él no se puede realizar ninguna operación).
Se eliminan de la lista el directorio ".", si aparece, y el directorio "..", si aparece y el listado es del directorio raíz. El directorio "..", si está en la lista, siempre es visible (se ignora el atributo oculto).
Obtener listas de archivos y directorios con detección automática del tipo de servidor
Se prueban todos los tipos de servidor definidos uno por uno. Se evalúa la condición de detección de cada tipo. Si es falsa, se omite el tipo y se prueba el siguiente. Si es verdadera, se utiliza para analizar el listado de texto. Si el análisis tiene éxito, produce la lista de archivos y directorios. Si no, se omite el tipo y se prueba el siguiente.
Si ningún tipo analiza correctamente el listado, se prueban uno por uno todos los omitidos por su condición de detección. Cada uno se utiliza para analizar el listado. Si tiene éxito, produce la lista de archivos y directorios. Si no, se omite y se prueba el siguiente.
Si falla el análisis con todos los tipos definidos, el plugin muestra un aviso y solo aparece el listado de texto en el panel (con él no se puede realizar ninguna operación).
El tipo de servidor solo se detecta automáticamente para el primer listado del servidor. Se utiliza el mismo para todos los demás, lo que permite mostrar las mismas columnas incluso en listados vacíos, etc. Si no se puede analizar un listado con el mismo tipo, el plugin intenta detectar otro.
Se eliminan de la lista el directorio ".", si aparece, y el directorio "..", si aparece y el listado es del directorio raíz. El directorio "..", si está en la lista, siempre es visible (se ignora el atributo oculto).
Sintaxis del analizador
Un comentario de línea comienza con "#" y termina con el carácter de fin de línea.
Cada regla comienza con "*" y termina con ";". No hay límite en el número de reglas. Una regla consta de funciones separadas por ",".
Una función consta de nombre, "(", lista de parámetros y ")". La lista completa de funciones se incluye más adelante en esta página.
Los parámetros de la lista se separan por ",". Los parámetros son expresiones.
Una expresión es un identificador de columna, una variable de estado, una constante o una operación binaria. La operación binaria tiene la forma habitual (first_operand operation_symbol second_operand). El operando puede ser un identificador de columna, una variable de estado o una constante.
Un identificador de columna consta del carácter '<', el nombre del identificador y el carácter '>'.
Las listas completas de variables de estado y símbolos de operación se incluyen más adelante en esta página.
Una constante es una cadena, un número o un booleano.
La cadena va entre comillas dobles (caracteres '"'). Debe definirse en una sola línea. Las secuencias de escape comienzan con '\'. Las admitidas son: "\\" para '\', "\"" para '"', "\t" para el tabulador, y "\r" y "\n" para los caracteres de fin de línea (CR y LF). Las demás secuencias de escape se consideran errores de sintaxis.
Un número consta de dígitos decimales. Los negativos llevan el prefijo "-" y los positivos, "+" (se puede omitir).
Un booleano es "true" o "false" (sin comillas dobles).
Columnas
Cada columna tiene un nombre de identificador, un tipo de valores, un valor vacío, un nombre y una descripción para el panel y una alineación de valores. El nombre del identificador se utiliza en el identificador de columna para asignarle valores. Cada columna solo puede contener un valor para cada elemento (archivo o directorio). Si no se asigna ninguno, se utiliza el valor vacío definido. La columna puede ser visible o no en el panel. Solo las columnas de tipo Nombre y Extensión son siempre visibles. Se definen en el cuadro Nueva/Editar columna (Editar columna).
Se dispone de los siguientes tipos de columna:
| Tipo | Descripción |
|---|---|
| Nombre | cadena; nombre de archivo o directorio; se necesita exactamente una columna de este tipo; no se puede ocultar; no tiene sentido definirle un valor vacío; el analizador debe asignarle un valor para cada archivo y directorio; si no se asigna, el análisis con la regla actual no añade ningún archivo ni directorio (sirve para omitir líneas vacías y otras partes irrelevantes del listado); asignar una cadena vacía ("") se considera un error de análisis |
| Extensión | cadena; extensión de archivo; los valores se generan automáticamente a partir de la columna de tipo Nombre; no se puede ocultar; no tiene sentido definirle un valor vacío |
| Tamaño de archivo en bytes | entero sin signo de 64 bits; tamaño de archivo en bytes; para todos los directorios el valor es cero y aparece como "DIR" en el panel; el valor vacío predeterminado es cero |
| Fecha de última escritura | fecha; fecha de última escritura (modificación); debe ser válida (si no, se sustituye por el 1 de enero de 1602); el valor vacío predeterminado es el 1 de enero de 1602 |
| Hora de última escritura | hora; hora de última escritura (modificación); el valor vacío predeterminado es 0:00:00 |
| Tipo de archivo | cadena; descripción del tipo de archivo (definida por Windows para las extensiones); los valores se generan automáticamente a partir de la columna de tipo Nombre; no tiene sentido definirle un valor vacío |
| Cualquier texto | cadena; uso general; el valor vacío predeterminado es una cadena vacía ("") |
| Cualquier fecha | fecha; uso general; debe ser válida (si no, se sustituye por el 1 de enero de 1602); el valor vacío predeterminado es una cadena vacía (""), por lo que no se muestra nada en el panel si no se asigna un valor |
| Cualquier hora | hora; uso general; el valor vacío predeterminado es una cadena vacía (""), por lo que no se muestra nada en el panel si no se asigna un valor |
| Cualquier número | entero con signo de 64 bits; uso general; el valor vacío predeterminado es una cadena vacía (""), por lo que no se muestra nada en el panel si no se asigna un valor |
Además, hay tres columnas virtuales con los identificadores <is_dir>, <is_hidden> e <is_link>. Se les asignan valores booleanos. Significan «¿es este elemento un directorio?» (false indica un archivo), «¿está oculto?» (false indica que no tiene el atributo oculto) y «¿es un enlace?» (false indica que no lo es). No es necesario asignarles valores; sus valores vacíos son «es un archivo», «no está oculto» y «no es un enlace».
Sintaxis de la condición de detección automática
La condición de detección automática es una expresión lógica. Sus operadores, de mayor a menor prioridad, son NOT, AND y OR. NOT (negación lógica) es unario; AND (conjunción lógica) y OR (disyunción lógica) son binarios. Puede contener subexpresiones entre paréntesis. Las siguientes funciones se utilizan como operandos:
| Función | Descripción |
|---|---|
| syst_contains(string) | devuelve true solo si la respuesta al comando FTP SYST (obtener el tipo de sistema operativo del servidor) contiene la cadena especificada (sin distinguir mayúsculas y minúsculas) |
| welcome_contains(string) | devuelve true solo si el primer mensaje del servidor contiene la cadena especificada (sin distinguir mayúsculas y minúsculas) |
| reg_exp_in_syst(regular_expression_string) | devuelve true solo si la respuesta al comando FTP SYST (obtener el tipo de sistema operativo del servidor) contiene una cadena que coincida con la expresión regular especificada (sin distinguir mayúsculas y minúsculas) |
| reg_exp_in_welcome(regular_expression_string) | devuelve true solo si el primer mensaje del servidor contiene una cadena que coincida con la expresión regular especificada (sin distinguir mayúsculas y minúsculas) |
Análisis
El análisis tiene éxito si se recorre todo el listado de texto mediante las reglas definidas.
La posición actual en el listado se denomina puntero. Durante el análisis, se mueve desde el principio hasta el final del listado.
Una regla solo se puede usar si todas sus funciones se evalúan correctamente, no se asigna una cadena vacía a la columna de tipo Nombre (se le puede asignar una cadena no vacía o nada) y el puntero llega al final de alguna línea del listado. Después de utilizar una regla, el puntero siempre se mueve al principio de la línea siguiente.
Al evaluarse una función, puede mover el puntero y asignar o cambiar valores en las columnas.
El analizador puede contener tantas reglas como necesite. Siempre se prueban en el orden en que se definen; es decir, siempre se utiliza la primera regla aplicable.
El listado puede estar incompleto si el usuario cancela su transferencia o hay un fallo de red. Se recorta para conservar solo las líneas de texto completas.
El análisis de un listado incompleto se trata al aplicar las reglas. En el caso sencillo, las reglas mueven el puntero al final del listado incompleto y el análisis termina correctamente. En otros casos, al evaluar una función de la regla actual, el puntero debería pasar a la línea siguiente. Como el listado está incompleto, no es posible y el análisis termina correctamente (igual que si la línea o líneas recorridas por la regla actual no estuvieran en el listado incompleto).
Tamaños de archivo compatibles
El plugin admite dos tipos de tamaño de archivo: en bytes y en bloques. El tamaño se debe asignar a la columna de tipo Tamaño de archivo en bytes (si está en bytes) o a una columna de tipo Cualquier número con el nombre estándar "Blocks" o "BlkSize". Así, el tamaño total en bytes o bloques aparecerá en la Línea de información al seleccionar un grupo de archivos.
Funciones de análisis
Salvo indicación expresa, se supone que la función siempre tiene éxito, no mueve el puntero ni asigna valores a ninguna columna. Si la función mueve el puntero y no se indica otra cosa, se supone que no puede pasar del final de línea a la siguiente.
Antes de usar el identificador de columna en una expresión, debe asignarse un valor a esa columna. De lo contrario, la expresión no tiene sentido (puede sustituirse por la constante booleana calculada usando el valor vacío predeterminado de la columna).
Nota: en la tabla siguiente, espacio en blanco significa el carácter de espacio o tabulador.
Se dispone de las siguientes funciones de análisis:
| Función | Descripción |
|---|---|
| if(expression) | el resultado de la expresión (parámetro expression) debe ser booleano; la función tiene éxito si el resultado es true |
| assign(<column>, expression) | el tipo del resultado de la expresión (parámetro expression) debe coincidir con el de los valores de la columna (parámetro <column>); asigna el resultado a la columna |
| skip_white_spaces() | omite todos los espacios en blanco en la posición del puntero; lo mueve detrás de ellos, si los hay |
| skip_to_number() | mueve el puntero al dígito decimal más cercano |
| white_spaces() | omite todos los espacios en blanco en la posición del puntero; la función solo tiene éxito si el puntero se mueve |
| white_spaces(number) | omite una cadena con el número especificado de espacios en blanco (parámetro number) en la posición del puntero; lo mueve detrás de la cadena; la función solo tiene éxito si existe esa cadena |
| white_spaces_and_line_ends() | omite todos los espacios en blanco y caracteres de fin de línea en la posición del puntero; la función solo tiene éxito si el puntero se mueve y no está al final del listado (se encontró algún carácter detrás de los espacios y finales de línea) |
| rest_of_line() | mueve el puntero al final de la línea; la función solo tiene éxito si el puntero se mueve |
| rest_of_line(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero hasta antes del final de línea; mueve el puntero al final de línea; la función solo tiene éxito si el puntero se mueve |
| word() | omite todos los caracteres excepto los espacios en blanco y finales de línea; la función solo tiene éxito si el puntero se mueve |
| word(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero hasta antes del primer espacio en blanco o final de línea; mueve el puntero detrás de ella; la función solo tiene éxito si el puntero se mueve |
| number(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser entero; le asigna un número decimal que comienza en la posición del puntero; debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si el número existe y está correctamente terminado, y si la columna es de tipo Tamaño de archivo en bytes, el número no puede ser negativo |
| positive_number(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser entero; le asigna un número decimal positivo que comienza en la posición del puntero; si es negativo, asigna el valor vacío predeterminado (cero para Tamaño de archivo en bytes, cadena vacía para Cualquier número); debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si el número existe y está correctamente terminado |
| number_with_separators(<column>, string) | el tipo de valores de la columna (parámetro <column>) debe ser entero; le asigna un número decimal con separadores de grupos de dígitos para facilitar la lectura de números grandes (los permitidos se indican en el parámetro string; puede ser cualquier carácter excepto dígitos decimales, "+" y "-") que comienza en la posición del puntero; debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si existe y está correctamente terminado, y si la columna es de tipo Tamaño de archivo en bytes, no puede ser negativo |
| month_3(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un mes representado por tres letras en la posición del puntero; admite nombres de meses en varios idiomas (actualmente inglés, alemán, noruego y sueco); el nombre debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del nombre; la función solo tiene éxito si el mes es conocido y todos los nombres del listado están en el mismo idioma |
| month_3(<column>, string) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un mes representado por tres letras en la posición del puntero; utiliza los nombres especificados en la cadena (parámetro string), que contiene doce nombres de tres letras separados por espacios (por ejemplo, "jan feb mar apr may jun jul aug sep oct nov dec" para inglés); el nombre debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del nombre; la función solo tiene éxito si el nombre está en la cadena |
| month_txt(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un mes representado por su nombre en la posición del puntero; admite nombres de meses en varios idiomas (actualmente alemán); el nombre debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del nombre; la función solo tiene éxito si el mes es conocido y todos los nombres del listado están en el mismo idioma |
| month_txt(<column>, string) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un mes representado por su nombre en la posición del puntero; utiliza los nombres especificados en la cadena (parámetro string), que contiene doce nombres separados por espacios (por ejemplo, "Jan. Feb. März Apr. Mai Juni Juli Aug. Sept. Okt. Nov. Dez." para alemán); el nombre debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del nombre; la función solo tiene éxito si el nombre está en la cadena |
| month(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un mes representado por un número decimal en la posición del puntero; debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si el número está entre 1 y 12 |
| day(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un día representado por un número decimal en la posición del puntero; debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si el número está entre 1 y 31 |
| year(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser fecha; le asigna un año representado por un número decimal en la posición del puntero; debe ir seguido de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del número; la función solo tiene éxito si el número está entre 0 y 999 (de 0 a 79 añade 2000; de 80 a 999 añade 1900; por ejemplo, 107 significa 2007) o entre 1602 y 9999 |
| time(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser hora; le asigna horas, minutos y, opcionalmente, segundos y milisegundos representados por números decimales en la posición del puntero; admite los formatos 00:00, 00:00:00 y 00:00:00.000; si van seguidos de "a", "am", "p" o "pm", se interpretan como mañana o tarde y se corrige la hora; debe ir seguida de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra ni un dígito; mueve el puntero detrás de la hora; la función solo tiene éxito si la hora es válida (intervalos: 0-23, 0-59, 0-59 y 0-999) |
| year_or_time(<column_date>, <column_time>) | los tipos de valores de las columnas (parámetros <column_date> y <column_time>) deben ser fecha y hora; asigna un año y, opcionalmente, una hora (solo horas y minutos), representados por un número decimal (año) o dos separados por ":" (hora) en la posición del puntero; admite el formato Unix estándar: si hay un año, la hora es desconocida; si hay una hora, calcula el año a partir de la fecha actual de modo que la fecha completa no tenga más de seis meses; los números deben ir seguidos de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás del año o la hora; la función solo tiene éxito si el valor es válido (intervalos: 1602-9999 y 0-23:0-59) |
| all(number) | omite el número especificado de caracteres (parámetro number); mueve el puntero detrás de ellos; la función solo tiene éxito si se omiten todos los caracteres especificados |
| all(<column>, number) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero con el número especificado de caracteres (parámetro number); mueve el puntero detrás de ella; la función solo tiene éxito si existe esa cadena |
| all_to(string) | busca la primera aparición de la cadena especificada (parámetro string), sin distinguir mayúsculas y minúsculas, y mueve el puntero detrás de ella; la función solo tiene éxito si la encuentra |
| all_to(<column>, string) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero hasta después de la primera aparición de la cadena especificada (parámetro string), sin distinguir mayúsculas y minúsculas; mueve el puntero detrás de la cadena encontrada; la función solo tiene éxito si la encuentra |
| all_up_to(<column>, string) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero hasta antes de la primera aparición de la cadena especificada (parámetro string), sin distinguir mayúsculas y minúsculas; mueve el puntero detrás de la cadena encontrada; la función solo tiene éxito si la encuentra |
| unix_link(<is_dir>, <column_name>, <column_link>) | los tipos de las columnas <column_name> y <column_link> deben ser Nombre y Cualquier texto; trabaja con una cadena desde la posición del puntero hasta antes del final de línea y mueve el puntero detrás de ella; espera el formato de enlace Unix estándar "link_name -> target_name" o "link_name" si el destino no es accesible; obtiene el nombre y, si está disponible, el destino, y detecta si enlaza a un archivo o directorio (heurística: si el nombre o destino contiene una extensión, probablemente es un archivo; si no, un directorio; si no encaja, puede añadir, por ejemplo, "assign(<is_dir>,false)" después de unix_link); asigna el nombre a la columna <column_name> y, si se conoce, el destino a <column_link>; asigna true a la columna virtual <is_dir> si enlaza a un directorio; la función solo tiene éxito si la cadena tiene el formato esperado y no comienza con espacio en blanco |
| unix_device(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; le asigna una cadena desde la posición del puntero con dos números decimales separados por "," y varios espacios (por ejemplo, "27, 26"); debe ir seguida de un delimitador habitual (coma, punto, punto y coma, dos puntos, etc.), espacio en blanco o final de línea, no de una letra; mueve el puntero detrás de ella; la función solo tiene éxito si encuentra la cadena |
| add_string_to_column(<column>, expression) | el tipo de valores de la columna (parámetro <column>) y el resultado de la expresión (parámetro expression) deben ser cadena; añade el resultado de la expresión a la columna |
| cut_white_spaces_end(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; elimina los espacios en blanco del final de la cadena de la columna y le asigna la nueva cadena |
| cut_white_spaces_start(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; elimina los espacios en blanco del principio de la cadena de la columna y le asigna la nueva cadena |
| cut_white_spaces(<column>) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; elimina los espacios en blanco del principio y del final de la cadena de la columna y le asigna la nueva cadena |
| back(number) | retrocede el puntero el número especificado de caracteres (parámetro number); la función solo tiene éxito si es posible ese movimiento (no se puede pasar a la línea anterior) |
| cut_end_of_string(<column>, number) | el tipo de valores de la columna (parámetro <column>) debe ser cadena; elimina el número especificado de caracteres (parámetro number) del final de la cadena de la columna y le asigna la nueva cadena; la función solo tiene éxito si el valor original tenía al menos number caracteres |
Variables de estado utilizadas en el análisis
Se dispone de las siguientes variables de estado:
| Variable | Descripción |
|---|---|
| first_nonempty_line | booleano; es true solo si el puntero está en la primera línea no vacía (que no contiene solo espacios en blanco) |
| last_nonempty_line | booleano; es true solo si el puntero está en la última línea no vacía (que no contiene solo espacios en blanco); no tiene en cuenta si el listado está completo o incompleto |
| next_char | cadena; contiene un carácter en la posición del puntero; está vacía si el puntero está al final del listado |
| next_word | cadena; comienza en la posición del puntero y termina antes del primer espacio en blanco o carácter de fin de línea |
| rest_of_line | cadena; comienza en la posición del puntero y termina antes del final de línea |
Operadores utilizados en el análisis
Antes de usar el identificador de columna en una expresión, debe asignarse un valor a esa columna. De lo contrario, la expresión no tiene sentido (puede sustituirse por la constante booleana calculada usando el valor vacío predeterminado de la columna).
Se dispone de los siguientes operadores:
| Operador | Descripción |
|---|---|
| == | igualdad; la comparación de cadenas distingue mayúsculas y minúsculas |
| != | desigualdad; la comparación de cadenas distingue mayúsculas y minúsculas |
| eq | igualdad de cadenas; solo para cadenas; no distingue mayúsculas y minúsculas |
| not_eq | desigualdad de cadenas; solo para cadenas; no distingue mayúsculas y minúsculas |
| in | búsqueda de subcadena; es true solo si la subcadena (operando izquierdo) está en la cadena (operando derecho); no distingue mayúsculas y minúsculas |
| not_in | es true solo si la subcadena (operando izquierdo) no está en la cadena (operando derecho); no distingue mayúsculas y minúsculas |
| end_with | es true solo si la cadena (operando izquierdo) termina con la subcadena (operando derecho); no distingue mayúsculas y minúsculas |
| not_end_with | es true solo si la cadena (operando izquierdo) no termina con la subcadena (operando derecho); no distingue mayúsculas y minúsculas |
Véase también
Configuración/Servidores
Cuadro Editar tipo de servidor
Cuadro Nueva/Editar columna
Cuadro Prueba de análisis
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