Строка 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 глава руководства на английском языке] |
| | | |
− | [[Файл:LtJ6KqW6mKk.jpg|LtJ6KqW6mKk.jpg]] | + | = Глава 15: Работа с текстом = |
− | [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. |
| + | |
| + | "} |
| + | |
| + | Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно использоваться с встроенным текстовым документом. |