DM Guide 15: различия между версиями

Материал из Chaotic Onyx
Перейти к навигацииПерейти к поиску
м (clean up)
м (Откат правок ZLOFENIХ (обсуждение) к версии Viol)
Строка 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.
 +
 +
"}
 +
 
 +
Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно  использоваться с встроенным текстовым документом.

Версия от 01:12, 13 декабря 2016

Это 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.

"}

Очень длинные текстовые цепочки следует помещать в отдельный файл. Однако, как и в этом примере, сообщения, содержащие внедренные выражения, могут аккуратно использоваться с встроенным текстовым документом.