SA-MP Forums Archive
[Include] [INC] Power INI v0.2 - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Include] [INC] Power INI v0.2 (/showthread.php?tid=142709)

Pages: 1 2


[INC] Power INI v0.2 - MX_Master - 19.04.2010

Power INI
самый функциональный INI ридер / райтер
Что это за скрипт?
- Это инклуд файл, который является библиотекой функций для чтения и записи INI файлов.

Какие возможности?
[Поддержка секций] - ещё их называют разделами/заголовками
# Поддержка строчных комментариев - сивмолы ; и #
# Можно открывать несколько файлов одновременно
# Сохранение оригинального формата файла
# Поддержка русских секций/ключей/значений/коментов
# Имена/значения могут содержать любые символы
# Пробельные символы ( \t \r \n пробел ) по бокам имен/значений считаются отступами
# Хранение временных данных в сжатом виде в динамической области памяти
# Возможность отслеживать коды и причины ошибок открытия/чтения/записи

Как использовать?
- Поместить файл power_ini.inc в папку {папка сервера}/pawno/include
- В самом верху вашего скрипта после строки #include <a_samp> добавить строку #include <power_ini>
- Использовать нижеуказанные функции

Какие есть функции?
на данный момент

ini_open ( file_name ) // вернет file_id или код ошибки < 0
ini_close ( file_id ) // если не закрыть файл, изменения не сохранятся на диск
ini_rename_file ( file_id, new_file_name, delete_old_file = 1 ) // добавлена в версии 0.2

ini_get ( file_id, section, key, value, max_value_size = sizeof(value) )
ini_get_int ( file_id, section, key, & value )
ini_get_float ( file_id, section, key, & Float: value )

ini_set ( file_id, section, key, value )
ini_set_int ( file_id, section, key, value )
ini_set_float ( file_id, section, key, Float: value )

ini_remove_key ( file_id, section, key ) // добавлена в версии 0.2
ini_remove_section ( file_id, section ) // добавлена в версии 0.2


Заметили баг / недочет?
- Пишите.

Хотите оставить отзыв / пожелание?
- Буду рад.

Скачать
- Исходник версии 0.1 - http://pawn.pastebin.com/E7tN0S7Z
- Исходник версии 0.2 - http://pawn.pastebin.com/Z0ziqash


Re: [INC] Power INI (анонс) - MX_Master - 26.04.2010

Перед релизом хочу спросить тех, кто юзает INI файлы ..

Нужны ли функции для получения/правки ключей, значения которых являются списками значений. Например есть ключ
Код:
ключ = значение1,значение2,значение3,значение4
и сейчас можно прочесть лишь всю строку, а вот "значение2" к примеру, придется выкавыривать самостоятельно. Функции могут называться ini_get_array, ini_get_int_array, ini_get_float_array.

Допустим в файле есть
Код:
...
[секция]
ключ = str,222.654,333.489,444,555,666,777,888,999
...
Возможные будущие примеры использования
Код:
new file_id, str_array[2][20], int_array[5], Float: float_array[4],
  str[20], int, Float: flo;

file_id = ini_open("труляля.ini");

ini_get_array( file_id, "секция", "ключ", str_array, ',' ); // str_array[0] = "str", str_array[1] = "222.654"
ini_get_int_array( file_id, "секция", "ключ", int_array, ',' ); // int_array[0] = 0, int_array[1] = 222, int_array[2] = 333, int_array[3] = 444, int_array[4] = 555
ini_get_float_array( file_id, "секция", "ключ", float_array, ',' ); // float_array[0] = 0.0, float_array[1] = 222.654, float_array[2] = 333.489, float_array[3] = 444.0

ini_get_array_element( file_id, "секция", "ключ", str, 3, ',' ); // 3 это порядковый номер в списке значений. str = "444", т.к. номера начинаются с 0
ini_get_int_array_element( file_id, "секция", "ключ", int, 1, ',' ); // int = 222
ini_get_float_array_element( file_id, "секция", "ключ", flo, 2, ',' ); // flo = 333.489

ini_close(file_id);
',' - это символ, разделяющий значения
set функции выглядят также


Подумайте над этим вопросом те, кто юзает ключи с несколькими значениями внутри.


Re: [INC] Power INI (анонс) - ^Woozie^ - 26.04.2010

Безусловно нужны!


Re: [INC] Power INI (анонс) - Riaz - 26.04.2010

Так удобнее, нужно


Re: [INC] Power INI (анонс) - Virtual1ty - 26.04.2010

I know this is Russian section, sorry, but you understand English so I think it's alright.

- I'm looking forward to this release, it would be very, very, very helpfull to me, and all of us.
- Hope you finish it soon MX_Master, best regards!

Edit: Also I hope you could use strmid to store strings in an array,
Example:
Код:
strmid(PlayerInfo[playerid][pNote], "None", 0, strlen("None"), 255);
Because it doesn't work for me with your older mx_INI, and I don't know how to use your 'fparam, sparam, iparam' thingy.


Re: [INC] Power INI (анонс) - Zeex - 26.04.2010

А что насчет эскейп-символов? То есть последовательности символов типа \x воспринимать как это делается самой пешкой

По моим сведениям их список таков: \a, \b, \f, \n, \r, \t, \', \", \\

И еще предложение - разбиение значений на несколько строк с помощью обратного слэша ('\\'), очень удобно если строка достаточно большой длины (например, текст диалога)


Re: [INC] Power INI (анонс) - MX_Master - 26.04.2010

Zeex
* - можно. А зачемэкранированные \', \", \\? Они итак будут читаться как есть.
* Многострочные значения - можно. Но придется убрать из механизма замены эскейп-символов - \r и \n.


Re: [INC] Power INI (анонс) - MX_Master - 26.04.2010

Теперь это релиз. Версия 0.1. Желающие могут протестировать.

ЗЫ: прикол, иностранцы за нами следят (: а мы за ними следим хоть?


Re: [INC] Power INI (анонс) - Zeex - 26.04.2010

Quote:
Originally Posted by MX_Master
* Многострочные значения - можно. Но придется убрать из механизма замены эскейп-символов - \r и \n.
Не, я имел ввиду при переносе строк сами переносы убирать, т.е. объединять в одну строку и убирать пробелы в начале новой

Например
Код:
ключ = очень \ 
      длинное \
      значение
в результате должно преобразоваться в
Код:
ключ = очень длинное значение
Ну а \r и \n заменять на '\r' и '\n'

Quote:
Originally Posted by MX_Master
Zeex
* - можно. А зачем экранированные \', \", \\ ? Они итак будут читаться как есть.
хз, наверное для полного набора ))



Re: [INC] Power INI (анонс) - Mishanzanza - 26.04.2010

Nice work! Теперь все конфиги можно в одном файле делать


Quote:
Originally Posted by Virtual1ty
I don't know how to use your 'fparam, sparam, iparam' thingy.
Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  SendClientMessage(playerid, 0xAAFF00, "OnPlayerOnPlayerCommandText start");
	new tmp[256];
	new targetid;
	
	new cmd[256];
	sparam(cmd, sizeof(cmd), cmdtext, 0);
	if(!strcmp("/setname", cmdtext, true, 8)) //Ex: /setname 1 lol
	{
    targetid = iparam(cmdtext, 1);
    if(IsPlayerConnected(targetid))
    {
      sparam(tmp, sizeof(tmp), cmdtext, 2);
      if(!strlen(tmp))
      {
        SetPlayerName(targetid, tmp);
			}
			else
			{
			  SendClientMessage(playerid, 0xAAFF00FF, "[ERROR] Invalid name");
			}
		}
		else
		{
		  SendClientMessage(playerid, 0xAAFF00FF, "[ERROR] Invalid player");
		}
		return 1;
	}
	
	return 0;
}
just example




Re: [INC] Power INI v0.1 - MX_Master - 26.04.2010

Эскейп символы отпадают, т.к. им нет не одного хорошего применения.

Zeex, приведи пример, где нужно обязательно переносить длинные строки символом \ , и где это в сэмпе может пригодится?

Я думаю, что многим может пригодится не этот вариант с переносом, а вот такой вариант, где символы переноса строк являются частью значения. Это позволит сохранять в INI файлах разные многострочные тексты. Например, тексты для диалоговых окон.

Code:
ключ = "Внимание! Соблюдайте строго эти два правила:
  * Не читерить (:
  * Не флудить!"
в общем виде значение этого ключа будет равно
Code:
Внимание! Соблюдайте строго эти два правила:\r\n  * Не читерить (:\r\n  * Не флудить!
именно в этом способе может пригодится экранирование \". Но пока желающих на такие способы хранения мало. Вот еси кому-то понадобится, тогда можно что-то сделать.


Re: [INC] Power INI v0.1 - Zeex - 26.04.2010

ОК, кажется возникли непонятки.... Я пытаюсь донести, что чтение файла _как_он_есть_, в том числе переносы, табы и пр. символы, ограничивает возможности его форматирования

Quote:
Originally Posted by MX_Master
Эскейп символы отпадают, т.к. им нет не одного хорошего применения.

Zeex, приведи пример, где нужно обязательно переносить длинные строки символом \ , и где это в сэмпе может пригодитЬся?
Допустим, мой редактор очень древний и переносит длинные строки самостоятельно и как захочет (читай как попало), а я же не желаю таких косяков и хочу ставить переносы и отступы где мне удобно, но вот ведь беда, парсер тупо сочтет их за часть данных (((

Или вот еще - мне надо вставить табы и переносы, но я не хочу разделять значения на куски. В таком случае я бы по логике воспользовался \t и \n, но о боже, парсер снова их игнорит!

Кстати в вике в статье про INI о таких фичах тоже упоминается:
(http://en.wikipedia.org/wiki/INI_file)

Quote:

Some implementations also offer varying support for an escape character, typically with the backslash (\). Some support "line continuation", where a backslash followed immediately by EOL (end-of-line) causes the line break to be ignored, and the "logical line" to be continued on the next actual line from the INI file. Implementation of various "special characters" with sequences escapes is also seen.
Common escape sequences Sequence Meaning
\\ \ (a single backslash, escaping the escape character)
\0 Null character
\a Bell/Alert/Audible
\b Backspace, Bell character for some applications
\t Tab character
\r Carriage return
\n Newline
\; Semicolon
\# Number sign
\= Equals sign
\: Colon
\x? Unicode character with hexadecimal codepoint corresponding to ?

Quote:
Originally Posted by MX_Master
Я думаю, что многим может пригодится не этот вариант с переносом, а вот такой вариант, где символы переноса строк являются частью значения. Это позволит сохранять в INI файлах разные многострочные тексты. Например, тексты для диалоговых окон.

Code:
ключ = "Внимание! Соблюдайте строго эти два правила:
  * Не читерить (:
  * Не флудить!"
в общем виде значение этого ключа будет равно
Code:
Внимание! Соблюдайте строго эти два правила:\r\n  * Не читерить (:\r\n  * Не флудить!
Хм, а как вообще диалоги воспринимают '\r'?


Re: [INC] Power INI v0.1 - MX_Master - 26.04.2010

- В диалогах \r\n , \n играют одинаковую роль.

- Эскейп символы помогают хранить бинарные данные. В данный момент, это только текстовый
однострочный ридер. Если я сделаю многострочный ридер, некоторые эскейпы и
переносы могут пригодится.

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


ЗЫ:
На общую спецификацию, где есть \ переносы и эскейпы - сильно не смотри.
Этот ридер весьма отличается от нее и специализируется на задачах сэмп сервера.
Вот например, русские буковки, пробелы и прочие символы в именах/значениях
в спецификации запрещены, а у меня разрешены.



Re: [INC] Power INI v0.1 - ZiGGi - 27.04.2010

на сколько медленнее чем mxINI?


Re: [INC] Power INI v0.1 - MX_Master - 27.04.2010

Quote:
Originally Posted by ZiGGi
на сколько медленнее чем mxINI?
надо бы провести опять тот тест на скорость..

вощем самое долгое во всем этом это чтение/запись в файл


Re: [INC] Power INI v0.1 - Johnny_Xayc - 27.04.2010

mxINI be cool ....функций хватает,ещё бы функцию чтобы переименовывала название файла и всё)


Re: [INC] Power INI v0.1 - JesterX - 27.04.2010

посимвольное копирование не рулит не? :P


Re: [INC] Power INI v0.1 - MX_Master - 27.04.2010

Quote:
Originally Posted by JesterX
посимвольное копирование не рулит не? :P
о чем именно идет речь?


Re: [INC] Power INI v0.1 - JesterX - 28.04.2010

Quote:
Originally Posted by Johnny_Xayc
mxINI be cool ....функций хватает,ещё бы функцию чтобы переименовывала название файла и всё)



Re: [INC] Power INI v0.1 - MX_Master - 28.04.2010

для переименовки файла уже функция есть, со след версией она тоже появится