Страницы

1 апреля 2012 г.

pgScript. Генераторы случайных последовательностей. Строки.

Приветствую Вас в своем блоге.

       Сегодня пойдет речь о создании и использовании случайных последовательностей типа STRING в pgScript, а так же использование регулярных выражений.
       pgScript имеет функционал быстрого создания массивов рандомных последовательностей нескольких типов данных. Области применения таких последовательностей ограничиваются только фантазией разработчиков скриптов, но чаще всего их используют как генераторы случайных данных для тестирования различных единиц функционала базы данных, либо генерации уникальных ключей. Тут уже дело вкуса.
       Итак, генераторы последовательностей строк...
Строковая последовательность определяется следующим образом:

set @Gen = string(Min,Max,[Count], [Seed]);
где,
Min - Минимальное количество символов в одной единице последовательности.
Max - Максимальное количество символов  в одной последовательности.
Count - Количество возвращаемых последовательностей. Т.е. другими словами - количество слов в предложении. (не обязательный параметр, по умолчанию - "1").
Seed - Параметр фиксирующий последовательность созданную при инициализации переменной, и не позволяющий менять ее при последующем использовании.


Т.е. Например:

declare @Gen;
begin
    set @Gen = string(1,4,5);

    print @Gen;
end

Результат:
[PGSCRIPT ] 4 v0aa H Rhp oiS

       В этом скрипте мы создали рандомную последовательность символов состоящую из пяти блоков размерностью от одного символа до четырех.
Передача последовательности другой переменной.
В этом скрипте приведу пример использования только обязательных параметров:

declare @Gen;
begin
    set @Gen = string(1,4);

    print @Gen;
end

Результат:
[PGSCRIPT ] lUWQ

Ранее определенная последовательность при присваивании другой переменной изменяет свое значение. Например:

declare @Gen;
declare @One;
declare @Two;
begin
    set @Gen = string(25,25);

    set @One = @Gen;
    set @Two = @Gen;
    print @Gen;
    print @One;
    print @Two;       
end

Результат:
[PGSCRIPT ] RNrOZicRAIcEJb7krS53aVo2S
[PGSCRIPT ] ZARhDW5o5jo5vH73k1cz3k7BM
[PGSCRIPT ] B4PlqgkAfVf5GCbhc7cHmP5YD

       В данном скрипте мы получили 3 абсолютно разные случайные строковые последовательности длинной 25 символов.
Соответственно следующий скрипт аналогичен предыдущему:

declare @Gen;
declare @One;
declare @Two;
begin
    set @Gen = string(25,25);

    set @One = @Gen;
    set @Two = @One; --(теперь @Two присваиваем @One, вместо @Gen)
    print @Gen;
    print @One;
    print @Two;       
end
Результат:
[PGSCRIPT ] zRXmo4pdf6HvKf8x7U8kHZzmf
[PGSCRIPT ] 7L6yBHpRUl3qyifuUwzRK8XQY
[PGSCRIPT ] WxBTHBTuwBxtXLyu3xOg9YgxP

Но при использовании параметра Seed ситуация меняется. Например:

declare @Gen;
declare @One;
declare @Two;
begin
    set @Gen = string(25,25,1);
    print @Gen;
    set @One = string(25,25,1,1);
    print @One;
    set @Two = string(25,25,1,1);
    print @Two;      
end

Результат:
[PGSCRIPT ] z1WEWBeEN3hjFKdUrmPMQylmp
[PGSCRIPT ] NWp23Wf0N4PgavqW5ePhulG2j
[PGSCRIPT ] NWp23Wf0N4PgavqW5ePhulG2j

       При повторном запуске скрипта, значение @Gen (первая строка измениться, а остальные останутся неизменными).
Для ясности сказанного приведу еще пример:

declare @Gen;
declare @One;
declare @Two;
begin
    set @Gen = string(25,25,1);
    print @Gen;
    set @One = string(25,25,1,1);
    print @One;
    set @Two = string(25,25,1,2);
    print @Two;     
end

Результат:
[PGSCRIPT ] QNSVbVPynOMyCi1YbtwyuNhHl
[PGSCRIPT ] NWp23Wf0N4PgavqW5ePhulG2j
[PGSCRIPT ] l2f463L0l8pNBrg3BJpOoWW5T

В этом скрипте изменилось значение параметра Seed в строке

set @Two = string(25,25,1,2);

что повлияло на изменение третьей строки результата относительно первого примера.
При повторном запуске скрипта, так же как и в примере выше измениться только первая строка результата, остальными останутся неизменными.

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

       Регулярные выражения

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

REGEX (regex, [seed]);
где,
regex - Строка-регулярное выражение,
[seed] - необязательный параметр, который задает генератору порядковый номер значения последовательности. Т.е. при использовании этого параметра, каждый раз при обращении к генератору будет возвращено одно и то же значение номер которого указан в данном параметре.
       Например вот таким образом, можно генерировать произвольные адреса электронных почтовых ящиков :) :

declare @Rec1;
begin
     set @Rec1 = REGEX ('[a-z]{5}_[0-9]{6}@mail.ru'); --пять букв "_" шесть цифр "@mail.ru"
     print @Rec1;
end

Результат:
[PGSCRIPT ] jzsoz_397596@mail.ru

       Пример использования с параметром [seed]:

declare @Rec1;
declare @Rec2;
declare @Rec3;
declare @Rec4;
begin
     set @Rec1 = REGEX ('[a-z]{5}_[0-9]{6}@mail.ru',1);
     print @Rec1;

     set @Rec2 = REGEX ('[a-z]{5}_[0-9]{6}@mail.ru',1);
     print @Rec2;

     set @Rec3 = REGEX ('[a-z]{5}_[0-9]{6}@mail.ru',2);
     print @Rec3;

     set @Rec4 = REGEX ('[a-z]{5}_[0-9]{6}@mail.ru',2);
     print @Rec4;
end

Результат:

[PGSCRIPT ] jnvab_358005@mail.ru
[PGSCRIPT ] jnvab_358005@mail.ru
[PGSCRIPT ] tbrbc_706010@mail.ru
[PGSCRIPT ] tbrbc_706010@mail.ru

       Данный пример показывает, что при каждом обращении к генератору с параметром [seed] в результате будет возвращено одно и тоже значение, которое зависит от значения параметра [seed]. Предположительно, [seed] - это номер значения в генерируемой последовательности.

2 комментария:

  1. Отлично, а как же остальные типы данных?

    ОтветитьУдалить
    Ответы
    1. :) По мере поступления свободного времени, я опишу все остальные типы...

      Удалить