|
|
| Строка 1: |
Строка 1: |
| ''Это 15 глава перевода оригинального руководства по Dream Maker от разработчиков.''
| |
|
| |
|
| [http://wiki.ss13.ru/index.php?title=All_about_the_code Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.]
| |
|
| |
|
| [http://www.byond.com/docs/guide/chap15.html Оригинальная 15 глава руководства на английском языке]
| |
|
| |
|
| = Глава 15: Работа с текстом =
| | [[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]] |
| | | [https://www.youtube.com/watch?v=wqpseZS3mD0 Конец прекрасной эпохи. Мы еще увидимся, я обещаю!] |
| ''Истинная магия — это изучение высших истин Природы.'' — Густавус Миллер, Что есть сон.
| |
| | |
| Строки текста – важная часть почти любого мира. Вы уже видели один хороший метод конструирования текста со встроенными аргументами и форматированием макросов. Есть другие элементарные команды, рассчитанные для работы с текстом. В этой главе мы вам о них и расскажем.
| |
| | |
| == findtext ==
| |
| | |
| Команда ''findtext'' ищет внутри одной строки текста другую. Эта операция работает без учета регистра, а ''findText'' - с учетом. Есть и другие пары команд, следующие такому же принципу: команда, содержащая заглавную букву, учитывает регистр.
| |
| | |
| findtext(T1,T2,Start=1,End=0)
| |
| findText(T1,T2,Start=1,End=0)
| |
| T1 – строка, в которой выполняется поиск.
| |
| T2 – строка, которую мы ищем.
| |
| Start – номер символа, с которого начинаем поиск.
| |
| End – номер символа, на котором мы его заканчиваем.
| |
| Результатом служит номер первого символа найденной строки. Если искомый текст не найден, то результат будет 0.
| |
| | |
| ''0'' используется как стандартное значение для обозначения позиции, которой нет. То есть, если поиск не требуется прекращать ни на каком символе, или если строка не найдена.
| |
| | |
| Пример использования ''findtext()'' для поиска в разговоре ключевых слов:
| |
| | |
| mob/rat
| |
| verb/tell(msg as text)
| |
| set src in oview()
| |
| if(findtext(msg,"cheese"))
| |
| view() << "[src] looks at [usr] hopefully."
| |
| walk_to(src,usr)
| |
| | |
| == copytext ==
| |
| | |
| Команда ''copytext'' копирует кусок строки. Эта команда, и предыдущая ''findtext'' то же самое, что и команды ''copy'' и ''find'' в стандартном текстовом редакторе.
| |
| | |
| copytext(Txt,Start=1,End=0)
| |
| Txt – строка из которой мы хотим скопировать часть.
| |
| Start – номер стартового символа.
| |
| End – номер символа, на котором нужно остановиться.
| |
| Возвращает получившуюся строку.
| |
| | |
| == addtext ==
| |
| | |
| Команда addtext объединяет две и более строк в одну. Это также можно сделать, вставляя строки одну за другой в другую строку, но когда нужно объединить много значений, проще использовать ''addtext()''.
| |
| | |
| addtext(Txt1,Txt2,...)
| |
| Возвращает одну строку, полученную путем слияния заданных.
| |
| | |
| == lentext ==
| |
| | |
| Команда ''lentex'' измеряет количество символов в строке.
| |
| | |
| lentext(Txt)
| |
| Txt – строка, длину которой вы хотите узнать.
| |
| Возвращает число символов в строке.
| |
| | |
| == Изменение текста ==
| |
| Есть несколько операций для изменения формы. Расскажем о каждой из них поподробнее.
| |
| | |
| === uppertext ===
| |
| | |
| Команда ''uppertext'' переводит любые символы нижнего регистра в верхний регистр.
| |
| | |
| uppertext(Txt)
| |
| Txt – текст, который вы хотите изменить.
| |
| Возвращает полученную строку.
| |
| | |
| === lowertext ===
| |
| | |
| Команда ''lowertext'' переводит любые символы верхнего регистра в нижний.
| |
| | |
| lowertext(Txt)
| |
| Txt – текст, который вы хотите изменить.
| |
| Возвращает полученную строку.
| |
| | |
| === text2num ===
| |
| | |
| Команда ''text2num'' переводит строку в числовое значение. Если текст не состоит из символов цифр, то команда вернет ''0''.
| |
| | |
| text2num(Txt)
| |
| Txt – текст, который вы хотите изменить.
| |
| Возвращает соответствующее число.
| |
| | |
| Важно знать, что текстовое значение кардинально отличается от числового, даже если визуально они похожи. Если вы попробуете совершить числовые операции со строкой, то у вас ничего не выйдет, потому что все текстовые цепочки и прочие нечисловые значения равнозначны нулю при работе с ними, словно с числами. Строку сначало надо перевести в число с помощью ''text2num'', и только потом можно будет работать со значением, как с числом.
| |
| | |
| === num2text ===
| |
| | |
| Команда ''num2text'' - противоположность ''text2num''. Она превращает числовое значение в строку. Этого также можно достигнуть, встраивая символы цифр в строку, но ''num2text()'' обеспечивает больший контроль над тем, как число форматируется.
| |
| | |
| num2text(Num,SigDigs)
| |
| Num – число для записи в строку
| |
| SigDigs – количество значащих цифр.
| |
| Возвращает новую строку.
| |
| | |
| Число значащих цифр определяет, когда будут использоваться технические обозначения. Числам стандартно выдаются 6 значащих цифр, так что технический знак будет использоваться только для чисел с 9 и более цифрами. Если вы хотите другого результата, вы можете использовать ''num2text()''.
| |
| | |
| == Сравнение текстовых цепочек ==
| |
| | |
| Проще всего сравнить две строки путем сравнения их ссылок на данные, с помощью оператора ''==''. Одинаковые строки всегда хранятся в одном месте для сбережения памяти.
| |
| | |
| Есть несколько специальных команд для сравнения текстовых цепочек, когда вам не подходит точное сравнение. Например, вы не хотите чтобы в сравнении была чувствительность к регистру, или вы хотите знать порядок строк по алфавиту.
| |
| | |
| === cmptext ===
| |
| | |
| Команда ''cmptext'' выполняет сравнение строк, чувствительное к регистру.
| |
| | |
| cmptext(Txt1,Txt2,...)
| |
| Txt1 – первая строка для сравнения.
| |
| Txt2 – вторая строка для сравнения.
| |
| Возвращает 1, если одинаковы, и 0, если нет.
| |
| | |
| === sorttext ===
| |
| | |
| Команда ''sorttext'' используется для определения алфавитного порядка строк. Она не чувствительна к регистру, а вот ''sortText'' делает тоже самое, но с чувствительностью к нему.
| |
| | |
| sorttext (Txt1,Txt2,...)
| |
| sortText (Txt1,Txt2,...)
| |
| Txt1 – первая строка для сравнения.
| |
| Txt2 – вторая строка для сравнения.
| |
| Возвращает 1, если возрастающий порядок, -1, если убывающий, в других случаях 0.
| |
| | |
| Следующий пример показывает как можно получить алфавитный список игроков.
| |
| | |
| proc/SortTextList(lst[])
| |
| var/i
| |
| var/j
| |
| for(i=1,i<=lst.len,i++)
| |
| for(j=i+1,j<=lst.len,j++)
| |
| if(sorttext(lst[i],lst[j]) == -1) //swap positions
| |
| var/tmp = lst[i]
| |
| lst[i] = lst[j]
| |
| lst[j] = tmp
| |
|
| |
| mob/verb/who()
| |
| var/lst[0]
| |
| var/mob/M
| |
| var/N
| |
| for(M)
| |
| if(M.client) lst += M.name
| |
| SortTextList(lst)
| |
| for(N in lst) usr << N
| |
| | |
| == Текстовые документы ==
| |
| | |
| Строка в DM заключается в одинарные кавычки. Это сделано для коротких текстовых цепочек, состоящих из нескольких слов. Более длинные строки могут вводиться как текстовые документы. Это тоже самое, что и обычные строки, не считая того, что они начинаются с '''"''' и заканчиваются '''"'''.
| |
| | |
| В то время, как в строках приходится избегать переноса и двойных кавычек, их можно вставлять прямо в текстовый документ. Это поможет вам писать более разборчивый исходный код, когда генерируются многочисленные линии выходных данных в одиночном утверждении.
| |
| | |
| Следующий пример использует текстовый документ, чтобы написать приветствие игрока.
| |
| | |
| mob/Login()
| |
| . = ..()
| |
| usr << {"
| |
|
| |
| The Great BYOND
| |
|
| |
|
| |
| Welcome, [usr]. I am glad you could join us.
| |
|
| |
|
| |
| Please refrain from scribbling on the walls.
| |
|
| |
| "}
| |
| | |
| Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно использоваться с встроенным текстовым документом.
| |