Функции разделителя строк ESQL для разделения строк с разделителями

ESQL не имеет встроенной функции разделения строк, такой как Java, и, хотя достаточно просто создать статическую функцию и добавить * .jar в путь к классам IIB, несколько сайтов, на которых я работал, имеют полный запрет на использование Java.

Итак, как выглядит эффективный разделитель строк в ESQL.


person TJA    schedule 12.05.2019    source источник


Ответы (1)


Следующие четыре варианта темы можно использовать для разделения строки ESQL.

Вместо того, чтобы добавлять множество параметров и приводить к довольно запутанной внутренней логике, я выбрал вариант использования имен функций вместо флагов.

SplitString

Не добавляет пустые строки, но добавляет строки с несколькими пустыми.

CREATE PROCEDURE SplitString(
    IN CompositeString CHAR,         -- Composite string that needs to be split
    IN Delimiter CHAR,               -- Delimiter to be used when splitting the string
    IN ArrayName CHAR,               -- Name of the array for the results of the function
    IN NewArray BOOLEAN,             -- Use TRUE to clear a pre-existing array, FALSE appends new element
    IN EnvRef REFERENCE              -- Reference to Environment tree
)
BEGIN        
    IF NewArray THEN
        DELETE FIELD EnvRef.SplitterArrays.{ArrayName};
    END IF;

    DECLARE Element CHAR;
    DECLARE Remainder CHAR CompositeString;

    DECLARE SplitterArrayRef REFERENCE TO EnvRef.SplitterArrays.{ArrayName};
    IF NOT LASTMOVE(SplitterArrayRef) THEN
        CREATE LASTCHILD OF EnvRef.SplitterArrays AS SplitterArrayRef NAME ArrayName;
    END IF;

    WHILE LENGTH(Remainder) <> 0 DO
        IF POSITION(Delimiter IN Remainder) > 0 THEN
            DECLARE Element CHAR SUBSTRING(Remainder BEFORE Delimiter);
            IF LENGTH(Element) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE Element;
            END IF;

            SET Remainder = SUBSTRING(Remainder AFTER Delimiter);
        ELSE
            DECLARE Element CHAR Remainder;
            IF LENGTH(Element) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE Element;
            END IF;

            SET Remainder = '';
        END IF;
    END WHILE;
END;

SplitStringTrim

Обрезать начальные и конечные пробелы из строк элемента.
Не добавляет пустые или пустые строки.

CREATE PROCEDURE SplitStringTrim(
    IN CompositeString CHAR,         -- Composite string that needs to be split
    IN Delimiter CHAR,               -- Delimiter to be used when splitting the string
    IN ArrayName CHAR,               -- Name of the array for the results of the function
    IN NewArray BOOLEAN,             -- Use TRUE to clear a pre-existing array, FALSE appends new element
    IN EnvRef REFERENCE              -- Reference to Environment tree
)
BEGIN        
    IF NewArray THEN
        DELETE FIELD EnvRef.SplitterArrays.{ArrayName};
    END IF;

    DECLARE Element CHAR;
    DECLARE Remainder CHAR TRIM(CompositeString);

    DECLARE SplitterArrayRef REFERENCE TO EnvRef.SplitterArrays.{ArrayName};
    IF NOT LASTMOVE(SplitterArrayRef) THEN
        CREATE LASTCHILD OF EnvRef.SplitterArrays AS SplitterArrayRef NAME ArrayName;
    END IF;

    WHILE LENGTH(Remainder) <> 0 DO
        IF POSITION(Delimiter IN Remainder) > 0 THEN
            DECLARE Element CHAR TRIM(SUBSTRING(Remainder BEFORE Delimiter));
            IF LENGTH(Element) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE Element;
            END IF;

            SET Remainder = SUBSTRING(Remainder AFTER Delimiter;
        ELSE
            DECLARE Element CHAR TRIM(Remainder);
            IF LENGTH(Element) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE Element;
            END IF;

            SET Remainder = '';
        END IF;
    END WHILE;
END;

SplitStringAddEmpty

Добавьте пустые элементы в SplitterArray, убедившись, что есть хотя бы один элемент.
Пустые элементы сохраняются.

CREATE PROCEDURE SplitStringAddEmpty(
    IN CompositeString CHAR,         -- Composite string that needs to be split
    IN Delimiter CHAR,               -- Delimiter to be used when splitting the string
    IN ArrayName CHAR,               -- Name of the array for the results of the function
    IN NewArray BOOLEAN,             -- Use TRUE to clear a pre-existing array, FALSE appends new element
    IN EnvRef REFERENCE              -- Reference to Environment tree
)
BEGIN        
    IF NewArray THEN
        DELETE FIELD EnvRef.SplitterArrays.{ArrayName};
    END IF;

    DECLARE Element CHAR;
    DECLARE Remainder CHAR CompositeString;
    DECLARE EndsWithDelimiter BOOLEAN ENDSWITH(Remainder, Delimiter);

    DECLARE SplitterArrayRef REFERENCE TO EnvRef.SplitterArrays.{ArrayName};
    IF NOT LASTMOVE(SplitterArrayRef) THEN
        CREATE LASTCHILD OF EnvRef.SplitterArrays AS SplitterArrayRef NAME ArrayName;
    END IF;

    IF LENGTH(Remainder) = 0 THEN
        CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE '';
    ELSE
        WHILE LENGTH(Remainder) <> 0 DO
            IF POSITION(Delimiter IN Remainder) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE SUBSTRING(Remainder BEFORE Delimiter);

                SET Remainder = SUBSTRING(Remainder AFTER Delimiter);
            ELSE
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE Remainder;

                SET Remainder = '';
            END IF;
        END WHILE;

        IF EndsWithDelimiter THEN
            CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE '';
        END IF;
    END IF;
END;

SplitStringAddEmptyTrim

Добавьте пустые элементы в SplitterArray, убедившись, что есть хотя бы один элемент.
Обрежьте начальные и конечные пробелы из строк элемента.

CREATE PROCEDURE SplitStringAddEmptyTrim(
    IN CompositeString CHAR,         -- Composite string that needs to be split
    IN Delimiter CHAR,               -- Delimiter to be used when splitting the string
    IN ArrayName CHAR,               -- Name of the array for the results of the function
    IN NewArray BOOLEAN,             -- Use TRUE to clear a pre-existing array, FALSE appends new element
    IN EnvRef REFERENCE              -- Reference to Environment tree
)
BEGIN        
    IF NewArray THEN
        DELETE FIELD EnvRef.SplitterArrays.{ArrayName};
    END IF;

    DECLARE Element CHAR;
    DECLARE Remainder CHAR TRIM(CompositeString);
    DECLARE EndsWithDelimiter BOOLEAN ENDSWITH(Remainder, Delimiter);

    DECLARE SplitterArrayRef REFERENCE TO EnvRef.SplitterArrays.{ArrayName};
    IF NOT LASTMOVE(SplitterArrayRef) THEN
        CREATE LASTCHILD OF EnvRef.SplitterArrays AS SplitterArrayRef NAME ArrayName;
    END IF;

    IF LENGTH(Remainder) = 0 THEN
        CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE '';
    ELSE
        WHILE LENGTH(Remainder) <> 0 DO
            IF POSITION(Delimiter IN Remainder) > 0 THEN
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE TRIM(SUBSTRING(Remainder BEFORE Delimiter));

                SET Remainder = SUBSTRING(Remainder AFTER Delimiter);
            ELSE
                CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE TRIM(Remainder);

                SET Remainder = '';
            END IF;
        END WHILE;

        IF EndsWithDelimiter THEN
            CREATE LASTCHILD OF SplitterArrayRef NAME 'Element' VALUE '';
        END IF;
    END IF;
END;
person TJA    schedule 12.05.2019