Кибор » Кибор - Интегрированная среда разработки ботов » Предложения по программе » INI

Страниц (4): [1] 2 3 4 »
 

1. Prusak - 31 Мая, 2014 - 10:49:07 - перейти к сообщению
Владимир было бы не плохо научить кибор работать с ini, что-то типо
INI(секция, ключ, значение_ключа, флаг_чтение_запись).
собераюсь в скрипт ввести графическую оболочку,и тут встал вопрос как хранить данные введенные с контролов.попытался реализовать средствами кибора получилось такое
PHP:
string put_p;
char b=' ';
string inp;
//проверяем записаны данные или нет
if (fopen ("c:\config.txt", "r")!=0)
{
l1:if (fread(put_p)!=0)
{
if (formatsn (put_p)==01){fread(put_p);put=put_p;}
goto l1;
}
fclose();
}
//записываем
inp=input ();
if (fopen ("c:\config.txt", "a")!=0)
{
fwrite("01");fwrite(b);fwrite(inp);
fwrite(ENDL);
fclose();
}

где "01" чтото типо ключа, но каждое обращение к fread приводит к чтению.ключ с одним значением выше упомянутый скрипт читает,а вот если потребуется записать сразу два значения, например клавиша бафа на себя через альт.
if (formatsn (put_p)==01){fread(put_p);put=put_p;} вот тут станет проблема.
2. Kibor - 31 Мая, 2014 - 14:23:51 - перейти к сообщению
Работать с файлом настроек надо таким образом

 Цитата:
int i1=0, i2=1, i3=2;

i1=formatsn(getcontrol(EDIT_0));
i2=formatsn(getcontrol(EDIT_1));
i3=formatsn(getcontrol(EDIT_2));



if (fopen ("C:\Настройка.txt", "w")!=0)//открываем файл
{//если открылся
fwrite(i1); fwrite(" ");
fwrite(i2); fwrite(" ");
fwrite(i3); fwrite(" ");
fclose();//закрываем файл
}







INITDIALOG
{
if (fopen ("C:\Настройка.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
fread(i1);
fread(i2);
fread(i3);
fclose();//закрываем файл

sendcontrol(EDIT_0, format(i1));
sendcontrol(EDIT_1, format(i2));
sendcontrol(EDIT_2, format(i3));
}

}



CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
STATIC_0 "текст 1" 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "0" 105 8 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "текст 2" 10 30 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "1" 105 28 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_2 "текст 3" 10 50 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_2 "2" 105 48 120 18 //ПозицияX ПозицияY РазмерX РазмерY
}
3. AaronSelenger - 23 Января, 2017 - 13:13:40 - перейти к сообщению
 Kibor пишет:
Работать с файлом настроек надо таким образом

 Цитата:
int i1=0, i2=1, i3=2;

i1=formatsn(getcontrol(EDIT_0));
i2=formatsn(getcontrol(EDIT_1));
i3=formatsn(getcontrol(EDIT_2));



if (fopen ("C:\Настройка.txt", "w"Подмигивание!=0)//открываем файл
{//если открылся
fwrite(i1); fwrite(" "Подмигивание;
fwrite(i2); fwrite(" "Подмигивание;
fwrite(i3); fwrite(" "Подмигивание;
fclose();//закрываем файл
}







INITDIALOG
{
if (fopen ("C:\Настройка.txt", "r"Подмигивание!=0)//открываем файл для чтения "r"
{//если открылся
fread(i1);
fread(i2);
fread(i3);
fclose();//закрываем файл

sendcontrol(EDIT_0, format(i1));
sendcontrol(EDIT_1, format(i2));
sendcontrol(EDIT_2, format(i3));
}

}



CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
STATIC_0 "текст 1" 10 10 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "0" 105 8 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "текст 2" 10 30 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_1 "1" 105 28 120 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_2 "текст 3" 10 50 90 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_2 "2" 105 48 120 18 //ПозицияX ПозицияY РазмерX РазмерY
}

А почему не учитывается то, что кибор например могут синхронизировать с другими программами. Ini было бы уместно в таком случаи.
4. Kibor - 23 Января, 2017 - 13:41:13 - перейти к сообщению
В чем проблема?
Пишите что надо.
Где вы вообще видели в языке программирования готовый модуль ini?
Какой такой ini шмини. Все зависит от требований самой готовой программы.
Есть язык. возможности. пишите.
5. Nightshade2 - 23 Января, 2017 - 14:34:53 - перейти к сообщению
ini удобен и поддерживается кучей других програм.
А так приходится костыли городить.
6. idcco - 26 Марта, 2017 - 06:53:16 - перейти к сообщению
 Nightshade2 пишет:
ini удобен и поддерживается кучей других програм.

Вообще согласен с автором. Тоже сталкнулся с данной проблемой. Это реализовано во многих программах (редакторы ide, конвертеры всякие, даже гребаный кликерманн имеет оператор iniread и iniwrite), и действительно очень удобно обращаться к одним и тем же настройкам из разных продуктов, жаль нет такой возможности в Киборе и приходится изобретать велосипед... Гугл помог вот информацией с библиотекой kernel32.ini в которой есть такие штуки как GetPrivateProfileString и WritePrivateProfileString. Но воспользоваться ими у меня так и не получилось. Пробовал так:
PHP:
string str;
external (INT, "readini", "GetPrivateProfileStringA", "kernel32.dll");
readini ("Section", "Key", "", str, 255, "config.ini");

Значение str получается пустым. Не подскажете, где я ошибся?
7. Kibor - 26 Марта, 2017 - 09:04:36 - перейти к сообщению
idcco ,
CODE:
char stroka[255];
external (INT, "readini", "GetPrivateProfileStringA", "kernel32.dll");
readini ("Section", "Key", 0, address(#stroka[0]), 255, "C:\config.ini");
messagebox (format(#stroka[0]));
8. idcco - 26 Марта, 2017 - 11:24:28 - перейти к сообщению
Отлично! Спасибо большое!!! Забыл про тип
9. idcco - 27 Марта, 2017 - 05:31:27 - перейти к сообщению
В общем сложности... Все прекрасно работает если не пихать в функцию. Щас поясню...
Есть файл config.ini на диске C:\ (С:\config.ini) со следующим листингом:
CODE:
[Default]
Name=Bot

Если использовать такой код:
CODE:
char str[255];
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString ("Default", "Name", 0, address (#str[0]), 255, "C:\config.ini");
string name = format (#str[0]);
messagebox (name);

то в переменной name получается верное значение - "Bot". Оно и выводится сообщением messagebox.

Но если запихнуть все это в функцию и вызвать ее:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
return (format (#str[0]));
}
string name = iniread ("Name");
messagebox (name);

то в результате name имеет пустое знеачение. Где я ошибся?
(Добавление)
Блин я как всегда!
Надо выводить return'ом переменную. Отбой паники! Простите, был напуган =D
Вот верный код:
CODE:
function iniread (string ini_key, string ini_section, string ini_filename)
{
char str[255];
if (ini_section == "") ini_section = "Default";
if (ini_filename == "") ini_filename = "C:\config.ini";
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
GetPrivateProfileString (ini_section, ini_key, 0, address (#str[0]), 255, ini_filename);
string str_return = format (#str[0]);
return str_return;
}
string name = iniread ("Name");
messagebox (name);
10. Kibor - 27 Марта, 2017 - 06:04:42 - перейти к сообщению
return format (#str[0]);

скобки не требует
и
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
не стоит вызывать в функции .
один раз в начале.

Powered by ExBB FM 1.0 Final