Все анкеты
Новая Предложение #3

Предложения по дополнению документации и функций бота (память, циклы и списки)

CEH92013
1) в разделе о работе с памятью лучше расписать, что именно обозначают данные под звёздочкой (ID пользователя и др.,), также желательно показать, как работать с записями, имеющими несколько значений сразу (массивы данных); 2) аналогично, больше информации нужно в разделе о списках: сейчас просто написано, что они есть, а как с ними работать (чтение, изменение, сохранение, проверка значений) - это заслуживает большего внимания, сейчас написано очень мало и скомканно; 3) предлагаю ввести для списков оператор endswith по аналогии со startswith; 4) предлагаю ввести циклы видов while (выполняется, пока условие истинно), until (выполняется, пока условие ложно), а также оператор do (выполнит цикл один раз перед проверкой условия). Синтаксис do: { do (...код цикла...) (оператор условия (while или until) ) // отличие в том, что цикл продолжается или прерывается в зависимости от условия и значения под ним } 5) предлагаю ввести для циклов и ветвлений (if и switch) внутренние операторы continue (прерывает текущую итерацию цикла/ветвления и переходит к следующей, с проверкой условия) и break (прерывает цикл/ветвление); 6) предлагаю ввести функционал чтения и редактирования пользовательских текстовых и табличных файлов, а также файлов CSV. Для этого необходимые файлы должны находиться на сервере (в указанном канале). Сценарии, когда такие файлы нужны: А) хранение информации о сервере, участниках и ботах отдельно от самого бота Silent (из соображений безопасности, а также для удобства редактирование и резервирования данных); Б) хранение больших массивов текста отдельно от команд (справочные материалы, тексты панелей и шаблоны сообщений, "лорные" материалы для ролеплея, тематических серверов и серверных игр). Подробнее о том, каким может быть конкретный функционал работы с файлами, могу написать завтра в течение дня.

Обсуждение (7)

CEH92013
Предлагаемый функционал файлов: Общий: file.create.(channel).[name].[ext] - создать файл с расширением txt, csv или xls в канале (channel) file.load.(channel).[name].[ext] - открыть файл с названием [name] и расширением [ext] в канале (channel) file.save.(channel).[name].[ext] - сохранить файл с названием [name] и расширением [ext] в канале (channel), если в указанном канале сукществует точно такой же файл, он будет перезаписан file.delete.(channel).[name].[ext] - удалить файл с названием [name] и расширением [ext] в канале (channel) file.copy.(channel).[name].[ext].newchannel.(channel2) - скопировать файл с названием [name] и расширением [ext] из канала (channel) в канал (channel2) file.move.(channel).[name].[ext].newchannel.(channel2) - переместить файл с названием [name] и расширением [ext] из канала (channel) в канал (channel2) //если файла или канала не существует, или директории операций с ним совпадают, нужно вывести ошибку Если работа с файлами прямо в канале невозможна, то как вариант можно предусмотреть работу с ними по указанной директории на локальной машине или на хостинге.
CEH92013
Для текста: read(strN) - считать строку strN целиком (отсчёт идёт с 1); read(strN[a,b]) - считать строку strN от символа a до b включительно (отсчёт символов идёт с 1); readto(strN[a]) - считать строку strN от начала до символа a включительно; readfrom(strN[a]) - считать строку strN от символа a включительно до конца; [одна_из_функций_выше].count("N") - вычислить кол-во вхождений значения "N" в указанный диапазон (строка, диапазон строки) - "N" может быть в другом регистре и быть частью другого текста; [одна_из_функций_выше].equal("N") - вычислить кол-во точных совпадений по вхождению значения "N" в указанный диапазон (строка, диапазон строки) - ищет "N" как отдельное "слово" с учётом регистра; write(strN, M) - заменить всю строку strN значением М; write("N", M) - заменить в файле все точные совпадения значения "N" на M; writefirst(strN, M) - вставить значение М в начало строки strN (остальной текст с этого места сдвигается впёред); writelast(strN, M) - вставить значение М в конец строки strN; writein(strN[a], M) - вставить значение М на место символа a в строке strN (остальной текст с этого места сдвигается впёред); write(strN[a,b], M) - заменить в строке strN все символы с a по b включительно на значение M; check(strN, M) - проверить, что строка strN посимвольно совпадает со значением M; check(strN[a,b], M) - проверить, что диапазон строки strN с a по b включительно посимвольно совпадает со значением M;
CEH92013
maketab(strN[a]) - вставить разделитель строки после символа а в строке strN; makespace(strN[a]) - вставить пробел после символа а в строке strN; deletetab(strN) - убрать разделитель строки после строки strN; deletespace(strN[a]) - убрать ближайший пробел после символа a в строке strN; makelist(strN, S) - преобразовать строку в список с разделителем, указанным как значение S); expandlist(strN, S) - преобразовать список на месте строки strN обратно в строку; readlist(strN, S) - считать S-ую запись списка strN (отсчёт начинается с 1); writelist(strN, S) - перезаписать S-ую запись списка strN (отсчёт начинается с 1).
CEH92013
Для CSV: newcolumn("N", M) - новый столбец с заголовком "N" на месте M (отсчёт начинается с 1); newraw("N", M) - новая ячейка для столбца "N" на месте M (отсчёт начинается с 1 после заголовков); read("N", M) - считать значение из ячейки M в столбце "N"; write("N", M, S) - записать значение S в ячейку M в столбце "N"; delete("N", M) - удалить значение из ячейки M в столбце "N"; deletecolumn("N") - удалить столбец "N" со всеми значениями; deleteraw("N") - удалить строку "N" со всеми значениями; readspace([a:b],[c:d]) - считать все значения из диапазона с ячейки в столбце a и строке b по ячейку в столбце c и строке d включительно; writespace([a:b],[c:d], S) - перезаписать значением S все значения из диапазона с ячейки в столбце a и строке b по ячейку в столбце c и строке d включительно; deletespace([a:b],[c:d]) - удалить все значения из диапазона с ячейки в столбце a и строке b по ячейку в столбце c и строке d включительно.
CEH92013
Для таблиц Excel: write(адрес ячейки, S) - записать значение S в указанную ячейку; read(адрес ячейки) - считать значение из указанной ячейки; delete(адрес ячейки) - удалить значение из указанной ячейки; readspace(диапазон) - считать все значения из указанного диапазона; writespace(диапазон, S) - перезаписать значением S все значения из указанного диапазона; deletespace(диапазон) - удалить все значения из указанного диапазона; readcellcolor(адрес ячейки) - считать цвет фона указанной ячейки; readcelltext(адрес ячейки) - считать цвет текста указанной ячейки; readcellformat(адрес ячейки) - считать формат указанной ячейки (общий, текст, число, дата и др.); writecellcolor(адрес ячейки, S) - изменить цвет фона указанной ячейки на S (цвет в формате RGB); writecelltext(адрес ячейки, S) - изменить цвет текста указанной ячейки на S; writecellformat(адрес ячейки, S) - изменить формат указанной ячейки на S (общий, текст, число, дата и др.); deletecellcolor(адрес ячейки) - удалить цвет фона указанной ячейки (он сбросится на белый); deletecelltext(адрес ячейки)- удалить цвет текста указанной ячейки (он сбросится на чёрный); deletecellformat(адрес ячейки) - удалить формат указанной ячейки (он сбросится на общий, значение может быть искажено); readspacecolor(диапазон) - считать цвет фона указанного диапазона; readspacetext(диапазон) - считать цвет текста указанного диапазона; readspaceformat(диапазон) - считать формат указанного диапазона (общий, текст, число, дата и др.);
CEH92013
writespacecolor(диапазон, S) - изменить цвет фона указанного диапазона на S (цвет в формате RGB); writespacetext(диапазон, S) - изменить цвет текста указанного диапазона на S; writespaceformat(диапазон, S) - изменить формат указанного диапазона на S (общий, текст, число, дата и др.); deletespacecolor(диапазон) - удалить цвет фона указанного диапазона (он сбросится на белый); deletespacetext(диапазон)- удалить цвет текста указанного диапазона (он сбросится на чёрный); deletespaceformat(диапазон) - удалить формат указанного диапазона (он сбросится на общий, значения могут быть искажены).
CEH92013
Обоснование, зачем нужны три формата файлов: Текстовые *txt: для хранения отдельно от команд больших объёмов текста, шаблонов сообщений, списков, и др. сходной информации, которой не место в чисто функциональном коде; CSV: гибрид текста и таблицы, для хранения простых по организации и наполнению двумерных массивов данных, с возможностью ручного и автоматического просмотра и редактирования. Первая строка *csv содержит заголовки, а остальные - значения с заданными разделителями (чаще всего для значений используется разделитель "запятая", а для строк - "точка с запятой"); Таблица xls: для упорядоченного хранения данных в виде двумерного массива с возможностями задания точных координат для хранения информации (адрес ячейки или диапазона) и выноса части вычислений и проверок условий в саму таблицу вместо кода в боте. Также желательно предусмотреть для всех операций, где можно указать номер (строки, символа, столбца, ячейки), возможность сдвига (в виде арифметической операции со значением адреса прямо при казании параметра, например, strN+1).
Войдите, чтобы комментировать