Difference between revisions of "RU/kb/00000652"
(→Итог) |
(→Итог) |
||
Line 170: | Line 170: | ||
== Итог == | == Итог == | ||
− | {{Load|Automatic_generation_of_test_data.ods|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
Contents
Генерация случайных чисел
Функция генерации случайного числа 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) |
---|
Итог
Все вышеперечисленные примеры собраны в единый файл: