Форум Pawn.Wiki - Воплоти мечту в реальность!: Убираем обнуление переменной при ini_getString - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Тема закрыта

[ Урок ]
Убираем обнуление переменной при ini_getString
Оценка: -----

#1
Пользователь офлайн   suza 

  • suza
  • Вставить ник
  • Раскрыть информацию
Всем привет, на связи Эльмир (Suza).
Сейчас я Вам расскажу о одной странной ситуации замеченной мною при работе с ini_getString.

Когда я создавал переменные вида
enum Название блока enum
{
Текстовая переменная1[значение],Текстовая переменная2[значение],
};
new Переменная[Значение][Название блока enum];



Затем открываю файл способом:

new FO_Acc = ini_openFile(Путь к файлу);
ini_getString(FO_Acc, "Ключ 1", Переменная[Значение][Текстовая переменная1]);
ini_getString(FO_Acc, "Ключ 2", Переменная[Значение][Текстовая переменная2]);
ini_closeFile(FO_Acc);



Перменные Переменная[Значение][Текстовая переменная1] и Переменная[Значение][Текстовая переменная2] обнулялись, то есть становились равными значениям "".
Так вот, у этой ситуации есть решение.

Открываем инклуд mxINI, и ко всем дефайнам добавляем:

#define          mxINI_rg_do(%0[%1][%2],%3,%4(%5,%6,%7))  new bool:FALSE=false;do{new %7[%3];%4(%5,%6,%7);format(%0[%1][%2],%3,"%s", %7);}while(FALSE)
#define          mxINI_rg(%0[%1][%2],%3,%4(%5,%6,%7)) 	do{new %7[%3];%4(%5,%6,%7);format(%0[%1][%2],%3,"%s", %7);}while(FALSE)



Как использовать?:
Если Вам надо записать одну переменную вида Переменная[Значение][Текстовая переменная1], используете:
mxINI_rg_do(Переменная[Значение][Текстовая переменная1], ЗНАЧЕНИЕ 1*, ini_getString(FO_Acc, "Ключ 1", varone));



Если надо записать несколько:

mxINI_rg_do(Переменная[Значение][Текстовая переменная1], ЗНАЧЕНИЕ 1*, ini_getString(FO_Acc, "Ключ 1", varone));
mxINI_rg(Переменная[Значение][Текстовая переменная2], ЗНАЧЕНИЕ 1*, ini_getString(FO_Acc, "Ключ 2", var));



Что такое "ЗНАЧЕНИЕ 1" - это размер данных, находящихся в ключе файла.

Если кто-то знает, чем связано такое поведение mxINI (ini_getString), отпишитесь и какие методы используете.

Сообщение отредактировал suza: 12 января 2016 - 16:15

1

#2
Пользователь офлайн   Island 

  • Banned
  • Вставить ник
  • Раскрыть информацию
норм лови +

#3
Пользователь офлайн   AloneAmigo 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Нерационально
Во-первых, переменная создаётся каждый раз. При желании можно переплюнуть размер стека, что очень нехорошо
Ну и в "небольших" вторых, нерационально для единичного копирования строки использовать format

Вот вполне валидный вариант:

new FO_Acc = ini_openFile(Путь к файлу), loadstring[MAX_CHARS];
ini_getString(FO_Acc, "Ключ 1", loadstring), strmid(*Переменная*, loadstring, 0, strlen(loadstring), MAX_CHARS);
ini_getString(FO_Acc, "Ключ 2", loadstring), strmid(*Переменная*, loadstring, 0, strlen(loadstring), MAX_CHARS);
ini_closeFile(FO_Acc);


Не надо писать такие костыли и подсаживать на них новичков, пожалуйста
0

#4
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию
Вы используете:
ini_getString(FO_Acc, "Ключ 1", Переменная[Значение][Текстовая переменная1]);

А нужно вот так:
ini_getString(FO_Acc, "Ключ 1", Переменная[Значение][Текстовая переменная1], 64); // 64 - максимальная длинна значения


После этого все будет записываться в переменную без проблем.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Тема закрыта

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика