Difference between revisions of "RU/kb/00000652"

From Wiki
Jump to navigationJump to search
 
(One intermediate revision by the same user not shown)
Line 170: Line 170:
 
== Итог ==
 
== Итог ==
  
{{LoadAll|File:Automatic_generation_of_test_data.ods}}Все вышеперечисленные примеры собраны в единый файл:
+
Все вышеперечисленные примеры собраны в единый файл:{{Load|Automatic_generation_of_test_data.ods|Automatic_generation_of_test_data.ods}}
 
<section end=toc />
 
<section end=toc />
  

Latest revision as of 12:09, 31 March 2012


Генерация случайных чисел

Функция генерации случайного числа RAND() мала пригодна для практического использования, поскольку возвращает случайное число в диапазоне от 0 до 1.


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


Например, формула (1) для генерация сотенных значений.


=RANDBETWEEN(100;999) (1)


В случае, если требуется сгенерировать цены с копейками, используется формула (2), позволяющая создать «цены» от 1 копейки до 1000 рублей. Остаётся применить формат ячейки «денежный».


=RANDBETWEEN(1; 10000)*0,01 (2)


Создание случайных чисел

Создать даты за определённый интервал так же просто.


Например, произвольная дата за предыдущие 90 дней создаётся формулой (3).


=TODAY()-RANDBETWEEN(1;90) (3)


Создать дату из определённого диапазона поможет комбинация функций RANDBETWEEN() и DATE(): формула (4), позволяющая создать произвольную дату за три года — с 2009 по 2011.


=DATE(RANDBETWEEN(2009;2011);RANDBETWEEN(1;12);RANDBETWEEN(1;31)) (4)


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


Генерация текста

Для заполнения текстовых данных можно сделать простейший генератор шума. Для этого понадобится ещё три функции: CHAR(), возвращающая символ по его коду из текущего шрифта, LEFT(), возвращающая n левых символов из строки, и оператор контактинации строк &.


В качестве параметров CHAR() требуются следующие интервалы значений:

  • цифры — от 48 до 57;
  • латинские заглавные буквы — от 65 до 90
  • латинские строчные буквы — от 97 до 122;
  • кириллических заглавные буквы — от 192 до 223;
  • кириллические строчные буквы — от 224 до 255.


Для генерации «слова», длинной 10 символов, в котором:

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

потребуется формула (5).


=CHAR(RANDBETWEEN(65;90))&RANDBETWEEN(0;9)&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&RANDBETWEEN(0;9)&CHAR(RANDBETWEEN(97;122)) (5)


Для придания слову разной длинны, «обернём» формулу (5) в функцию LEFT(), и заставим вернуть «слово», длинной от 3 до 10 символов: формула (6).


=LEFT(x;RANDBETWEEN(3;10)) (6)

- здесь x — формула (5).


Итоговая формула (7):


=LEFT(CHAR(RANDBETWEEN(65;90))&RANDBETWEEN(0;9)&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&CHAR(RANDBETWEEN(97;122))&RANDBETWEEN(0;9)&CHAR(RANDBETWEEN(97;122));RANDBETWEEN(3;10)) (7)


Следует отметить, что в формуле (7) явно смешение типов данных — числовых и текстовых. Однако, в контактинируемой строке, InfraOffice.pro Calc автоматически выполняет приведение типов и ошибки не возникает.

Почтовые индексы и телефонные номера

В России почтовые индексы шестизначные, поэтому применим функцию форматирования по маске TEXT(). Получим формулу для индекса (8).


=TEXT(RANDBETWEEN(1;999999);"000000") (8)


С телефонными номерами несколько сложнее, поскольку с помощью формата ячеек невозможно добиться «телефонного» разбиения числа на разряды. Поэтому соединим оператор контактинации и функцию TEXT() в формуле (9) для получения федерального телефонного номера в международном формате.


="+"&RANDBETWEEN(1;9)&" ("&RANDBETWEEN(101;999)&") "&TEXT(RANDBETWEEN(1011111;9999999);"000-00-00") (9)


Выборка произвольной позиции из списка

В InfraOffice.pro Calc можно организовывать работу со списками, используя именованные диапазоны.


Допустим, список стран помещён в именованный диапазон «Strana». Формула (10) для выборки позиции из списка стран использует две дополнительные функции: INDEX() и COUNTA().


=INDEX(Strana;RANDBETWEEN(1;COUNTA(Strana))) (10)


На этом принципе можно организовать построение сложных наборов данных.


Генерация списка ФИО с адресами

Для генерации фамилий имён и отчеств можно воспользоваться нормой русского языка — стандартными окончаниями «-ов» и «-ович» для отчеств и фамилий, созданных на основе имён.


Имена, страны, города и улицы вводятся в списки, по которым создаются именованные диапазоны «Strana», «Gorod», «Ulica», «Name». На основе формулы (10) создаём для ФИО формулу (11).


=INDEX(Name;RANDBETWEEN(1;COUNTA(Name)))&"ов"&" "&INDEX(Name;RANDBETWEEN(1;COUNTA(Name)))&" "&INDEX(Name;RANDBETWEEN(1;COUNTA(Name)))&"ович" (11)


Всё перечисленное позволяет собрать формулу (12) для почтового адреса.


=TEXT(RANDBETWEEN(1;999999);"000000")&", "&INDEX(Strana;RANDBETWEEN(1;COUNTA(Strana)))&", г. "&INDEX(Gorod;RANDBETWEEN(1;COUNTA(Gorod)))&", ул. "&INDEX(Ulica;RANDBETWEEN(1;COUNTA(Ulica)))&", дом "&RANDBETWEEN(1;99)&", кв "&RANDBETWEEN(1;999) (12)


Итог

Все вышеперечисленные примеры собраны в единый файл:












К началу страницы