SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 15/08/2016, 12:05 AM   #1
FaGo
Little Clucker
 
Join Date: Dec 2013
Posts: 48
Reputation: 0
Question Форматирование текста

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

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

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), 
FaGo is offline   Reply With Quote
Old 15/08/2016, 06:16 AM   #2
eakwarp
High-roller
 
Join Date: Feb 2007
Posts: 1,899
Reputation: 131
Default Re: Форматирование текста

С точки зрения производительности - одинаково.
С точки зрения читабельности и понимания кода - я за третий.
__________________
More than 10 years of development, more than 40 mb(sic! 1 kk lines+) of source code, more than a two hundred units and more than 35k revisions(upd. aug 2017). Valakas Roleplay - choose your role.

Как правило, то, что делаю я, лишь через годы начинают делать другие, но потом, обязательно мне ставят в укор, "ой, да это уже у всех есть"...



[Gamemode] Valakas Trucker Roleplay (Russian).
eakwarp is offline   Reply With Quote
Old 15/08/2016, 07:45 PM   #3
Diman777
Huge Clucker
 
Diman777's Avatar
 
Join Date: Aug 2011
Location: Ростов-на-Дону
Posts: 438
Reputation: 22
Default Re: Форматирование текста

Лично я использую 2-ой, хотя в нём есть маленький недостаток:
Если мы желаем раскрыть 'ф-ию', то придётся постоянно ставить символ обратного слэша \, ибо без него при компиляции будут ошибки.
PHP Code:
SCMF\
(\
    
playeridCOLOR_WHITE,\
    
"blablablablablablablablablablablablabla %d %d %d %d %d",\
    
blablablablablablablablablabla\
); 
Может есть решение какое-нибудь? (чтобы юзать без слэша)
Diman777 is offline   Reply With Quote
Old 15/08/2016, 10:12 PM   #4
VVWVV
Big Clucker
 
Join Date: Jun 2015
Posts: 142
Reputation: 70
Default Re: Форматирование текста

Конечно есть. Существует ручной, динамический вариант. Я про подсчёт строки при инициализации массива. Форматирование же проводить с помощью функций format, либо же str-cat/ins. Данный способ будет более эффективным, чем везде использовать format.
VVWVV is offline   Reply With Quote
Old 15/08/2016, 11:50 PM   #5
FaGo
Little Clucker
 
Join Date: Dec 2013
Posts: 48
Reputation: 0
Default Re: Форматирование текста

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

не надо в format(string,цыфру самому писать?
FaGo is offline   Reply With Quote
Old 16/08/2016, 12:28 AM   #6
Diman777
Huge Clucker
 
Diman777's Avatar
 
Join Date: Aug 2011
Location: Ростов-на-Дону
Posts: 438
Reputation: 22
Default Re: Форматирование текста

144 - в данном случае это максимальная длина строки для переменной string, при объявлении ты сам решаешь какое туда число запихнуть.
Quote:
или тратит весь 144
тратит столько - сколько нужно для строки.
Quote:
не надо в format(string,цыфру самому писать?
Можешь и сам писать, если ты заранее знаешь сколько примерно будет в строке символов, но в данном случае для таких самописных ф-ий как SCMF - лучше отводить макс. значения: 144, 256 и т.д.
Diman777 is offline   Reply With Quote
Old 16/08/2016, 12:31 AM   #7
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,311
Reputation: 86
Default Re: Форматирование текста

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

А если размер массива <= максимально_допустимой_длине_строки+1, то можно писать sizeof(string). Самое главное не написать больше sizeof(string).
stabker is offline   Reply With Quote
Old 16/08/2016, 05:06 PM   #8
Diman777
Huge Clucker
 
Diman777's Avatar
 
Join Date: Aug 2011
Location: Ростов-на-Дону
Posts: 438
Reputation: 22
Default Re: Форматирование текста

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

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Вопрос] Повтор текста в чате wabbajek Русский/Russian 5 10/02/2016 07:46 AM
Разбивка текста на 3 строки MeNaceSwagga Русский/Russian 2 12/04/2015 01:09 AM
Замена текста из файла условием Mass_Deboose Русский/Russian 4 26/01/2014 06:26 PM
Возвращение текста Romz Русский/Russian 13 12/01/2014 01:35 PM
Форматирование строки Ted67 Русский/Russian 37 16/04/2013 10:39 AM


All times are GMT. The time now is 09:21 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.