DM Guide 15: различия между версиями
ZLOFENIХ (обсуждение | вклад) м (clean up) |
ASORGOO (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 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: Работа с текстом = |
− | [ | + | |
+ | ''Истинная магия — это изучение высших истин Природы.'' — Густавус Миллер, Что есть сон. | ||
+ | |||
+ | Строки текста – важная часть почти любого мира. Вы уже видели один хороший метод конструирования текста со встроенными аргументами и форматированием макросов. Есть другие элементарные команды, рассчитанные для работы с текстом. В этой главе мы вам о них и расскажем. | ||
+ | |||
+ | == 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. | ||
+ | |||
+ | "} | ||
+ | |||
+ | Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно использоваться с встроенным текстовым документом. |
Текущая версия от 10:06, 1 апреля 2024
A long time ago in a galaxy far, far away... |
Данная статья помечена как устаревшая, её содержание может быть неверным или неактуальным. Если она не будет актуализирована или не появится веского повода для снятия этой плашки, то вскоре она будет перемещена в Священный архив. При желании вы можете помочь проекту Onyx и сообществу SS13 в целом — загляните на наш Портал сообщества. |
Это 15 глава перевода оригинального руководства по Dream Maker от разработчиков.
Остальные главы руководства и статьи о программировании на коде BYOND от любителей на русском.
Оригинальная 15 глава руководства на английском языке
Глава 15: Работа с текстом
Истинная магия — это изучение высших истин Природы. — Густавус Миллер, Что есть сон.
Строки текста – важная часть почти любого мира. Вы уже видели один хороший метод конструирования текста со встроенными аргументами и форматированием макросов. Есть другие элементарные команды, рассчитанные для работы с текстом. В этой главе мы вам о них и расскажем.
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. "}
Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно использоваться с встроенным текстовым документом.