Форматирование текста
#1

Здравствуйте! как лучше форматировать текст и отправлять его в чат

примеры,которые видел на разных порталах

1.
PHP Code:
stock SendMes(playeridcolorfstring[], {Float_}:...)
{
    static const
        
STATIC_ARGS 3;
    new
        
= (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
    if (
n)
    {
        new
            
message[128],
            
arg_start,
            
arg_end;
        
#emit CONST.alt        fstring
        #emit LCTRL          5
        #emit ADD
        #emit STOR.S.pri        arg_start
        #emit LOAD.S.alt        n
        #emit ADD
        #emit STOR.S.pri        arg_end
        
do
        {
            
#emit LOAD.I
            #emit PUSH.pri
            
arg_end -= BYTES_PER_CELL;
            
#emit LOAD.S.pri      arg_end
        
}
        while (
arg_end arg_start);
        
// Push the static format parameters.
        #emit PUSH.S          fstring
        #emit PUSH.C          128
        #emit PUSH.ADR         message
        
+= BYTES_PER_CELL 3;
        
#emit PUSH.S          n
        #emit SYSREQ.C         format
        
+= BYTES_PER_CELL;
        
#emit LCTRL          4
        #emit LOAD.S.alt        n
        #emit ADD
        #emit SCTRL          4
        
return SendClientMessage(playeridcolormessage);
    }
    else
    {
        return 
SendClientMessage(playeridcolorfstring);
    }

2.
PHP Code:
new format_string [144];
#define SCMF(%0,%1,%2,%3) format(format_string, 144, %2,%3) && SCM(%0, %1, format_string)
SCMF(playerid,COLOR_WHITE,"blabla %d"blabla); 
3.
PHP Code:
или все-таки лучше format(string,sizeof(string), 
Reply
#2

С точки зрения производительности - одинаково.
С точки зрения читабельности и понимания кода - я за третий.
Reply
#3

Лично я использую 2-ой, хотя в нём есть маленький недостаток:
Если мы желаем раскрыть 'ф-ию', то придётся постоянно ставить символ обратного слэша \, ибо без него при компиляции будут ошибки.
PHP Code:
SCMF\
(\
    
playeridCOLOR_WHITE,\
    
"blablablablablablablablablablablablabla %d %d %d %d %d",\
    
blablablablablablablablablabla\
); 
Может есть решение какое-нибудь? (чтобы юзать без слэша)
Reply
#4

Конечно есть. Существует ручной, динамический вариант. Я про подсчёт строки при инициализации массива. Форматирование же проводить с помощью функций format, либо же str-cat/ins. Данный способ будет более эффективным, чем везде использовать format.
Reply
#5

Quote:
Originally Posted by Diman777
View Post
Лично я использую 2-ой, хотя в нём есть маленький недостаток:
Если мы желаем раскрыть 'ф-ию', то придётся постоянно ставить символ обратного слэша \, ибо без него при компиляции будут ошибки.
PHP Code:
SCMF\
(\
    
playeridCOLOR_WHITE,\
    
"blablablablablablablablablablablablabla %d %d %d %d %d",\
    
blablablablablablablablablabla\
); 
Может есть решение какое-нибудь? (чтобы юзать без слэша)
Я одного не понял,компилятор сам вычисляет сколько кол-во символов в "" или тратит весь 144

не надо в format(string,цыфру самому писать?
Reply
#6

144 - в данном случае это максимальная длина строки для переменной string, при объявлении ты сам решаешь какое туда число запихнуть.
Quote:

или тратит весь 144

тратит столько - сколько нужно для строки.
Quote:

не надо в format(string,цыфру самому писать?

Можешь и сам писать, если ты заранее знаешь сколько примерно будет в строке символов, но в данном случае для таких самописных ф-ий как SCMF - лучше отводить макс. значения: 144, 256 и т.д.
Reply
#7

Число можно (или нужно, в зависимости от ситуации) писать, когда размер массива превосходит максимально допустимую длину строки+1. Например, есть массив на 256 ячеек, в нем форматируется строка, которую затем необходимо вывести игроку через SendClientMessage. Известно, что SCM не выведет строку, длиннее 144 символов. Поэтому целесообразно написать format(string, 145, ...).

А если размер массива <= максимально_допустимой_длине_строки+1, то можно писать sizeof(string). Самое главное не написать больше sizeof(string).
Reply
#8

Quote:
Originally Posted by stabker
View Post
Известно, что SCM не выведет строку, длиннее 144 символов.
Если не разбивать сообщение на две и более строк, то конечно 144 + 1.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)