Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » вопрос по external и др

Страниц (22): В начало « ... 14 15 16 17 [18] 19 20 21 22 »
 

171. 007wan - 18 Апреля, 2019 - 05:32:50 - перейти к сообщению
Почему после сохранения в файле некоторые сохраненные настройки рондомно помечаются не 1 и 0, а как 9 и 8. Тесть 1 - активна = 9 и 0 - не активна = 8.
CODE:
Status_Combobox1 = sendmessage(CB_GETCURSEL, 0, 0, formatiw(Object_Combobox1));
Status_Checkbox1 = SendMessage(Object_Checkbox1, BM_GETSTATE, 0, 0);
Status_Checkbox2 = SendMessage(Object_Checkbox2, BM_GETSTATE, 0, 0);
Status_Checkbox3 = SendMessage(Object_Checkbox3, BM_GETSTATE, 0, 0);
Status_Checkbox4 = SendMessage(Object_Checkbox4, BM_GETSTATE, 0, 0);
Status_Checkbox5 = SendMessage(Object_Checkbox5, BM_GETSTATE, 0, 0);
Status_Checkbox6 = SendMessage(Object_Checkbox6, BM_GETSTATE, 0, 0);
Status_Checkbox7 = SendMessage(Object_Checkbox7, BM_GETSTATE, 0, 0);
Status_Checkbox8 = SendMessage(Object_Checkbox8, BM_GETSTATE, 0, 0);
SendMessage(Object_Edit1, WM_GETTEXT, sizearray(Text_Edit1), address(#Text_Edit1[0]));

WritePrivateProfileString ("Default", "Object_Combobox1", format(Status_Combobox1), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox1", format(Status_Checkbox1), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox2", format(Status_Checkbox2), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox3", format(Status_Checkbox3), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox4", format(Status_Checkbox4), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox5", format(Status_Checkbox5), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox6", format(Status_Checkbox6), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox7", format(Status_Checkbox7), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox8", format(Status_Checkbox8), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Edit1", format(#Text_Edit1[0]), PathSaveSettings);

(Добавление)
Тоесть если сохранил галочку как активной, то вместо 1 вписывает 9, а для 0 - 8
(Добавление)
если не найдется решения, то тогда придется в каждом сравнении писать вместо:
CODE:

if(format(Status_Checkbox7) == "1")
{
}

это:
CODE:

if(format(Status_Checkbox7) == "1" || format(Status_Checkbox7) == "9")
{
}
172. Zireael - 18 Апреля, 2019 - 06:19:15 - перейти к сообщению
 Цитата:
то вместо 1 вписывает 9, а для 0 - 8

 Цитата:
BM_GETSTATE
Возвращаемое значение указывает текущее состояние кнопки. Это комбинация следующих значений.

Например, галка выбрана и имеет фокус, то возвращается 9 потому что BST_CHECKED (1) + BST_FOCUS (8), если не имеет фокуса, то вернёт 1, т. к. не будет флага что стоит фокус.
В кибор нет побитовых функций, так что проверять так:
CODE:
if(Status_Checkbox7 == 1 || Status_Checkbox7 == 9)
173. 007wan - 18 Апреля, 2019 - 06:26:29 - перейти к сообщению
Не могу осмыслить алгоритм загрузки лога из файла в listbox. нужен формат какой-то, который позволит загружать всё из файла в список, даже дату, которая не является сегодняшней.
В файл сохраняется:
 Цитата:

[Default]//название заголовка
//сам текст

Я не знаю каким способом лучше сохранять, что бы их быстрее загружать и правильно, если имеются таки переменные как: количество строк, текст для каждой строчки, заголовок(не обязательно.
Если можно, то как сделать это. И еще впрос: можно ли сохранить много текст на разных строчках в файле, если зоголовок всегда будет одинаковым?
(Добавление)
Пока имеется вот такой формат, а какой лучше?
текст (Отобразить)
174. Zireael - 18 Апреля, 2019 - 06:44:19 - перейти к сообщению
 Цитата:
нужен формат какой-то, который позволит загружать всё из файла в список

Записывать данные в txt файл.
Прочитать весь файл по строкам freadline в массив потом добавить в список эти строки.
175. 007wan - 18 Апреля, 2019 - 08:06:35 - перейти к сообщению
Zireael , А как ты считаешь, если делать язык программы, то стоит переводить лог?)) Или это плохая шутка)
(Добавление)
А где ты берешь эту дичь?
 Zireael пишет:
regexreplace(-1, #s, s, "(\B[A-Z][a-z]*)", " $1");

Просто мне нужно, что бы в каждой строчке или во всем файле искало сегодняшную дату
(Добавление)
А если не найдено, то искать "dd.mm.yy"- где буквы, то они могут быть разные
176. Zireael - 18 Апреля, 2019 - 19:42:49 - перейти к сообщению
 Цитата:
А где ты берешь эту дичь?
regexreplace(-1, #s, s, "(\B[A-Z][a-z]*)", " $1" );

Набрать в поиске: Регулярные выражения.
 Цитата:
нужно, что бы в каждой строчке или во всем файле искало сегодняшную дату

CODE:
external(INT, "wsprintf", "wsprintfA", "User32.dll" );
string s="Найти сегодняшнюю дату 25.01.20, 19.04.19, 4.11.18"; // строка
messagebox(find_today_date(s));

// найти сегодняшнюю дату в строке
function find_today_date(string s)
{
char day[3], month[3];
string date, year;
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
wsprintf(address(#day[0]), "%02d", Day);
wsprintf(address(#month[0]), "%02d", Month);
regexsearch(1, #year, format(Year), "\d{2}", RIGHTTOLEFT);
if(regexsearch(1, #date, s, "\b"+format(#day[0])+"\."+format(#month[0])+"\."+year+"\b"))return date;
return "Дата не найдена";
}

 Цитата:
искать "dd.mm.yy"

CODE:
string s="Найти дату 19.04.19 в тексте";
messagebox(find_date(s));
s="Некорректная дата 39.04.19 не будет найдена";
messagebox(find_date(s));
s="Найти дату 3.11.1990";
messagebox(find_date(s));

// найти дату в строке
function find_date(string s)
{
string date;
if(regexsearch(1, #date, s, "\b([012][0-9]|3[01]|[1-9])\.(0\d|1[0-2]|[1-9])\.(\d{4}|\d{2})\b"))return date;
return "Дата не найдена";
}
177. 007wan - 19 Апреля, 2019 - 05:38:06 - перейти к сообщению
Во. Спасибо.
(Добавление)
В общем я подумал и решил, что лучше так будет:
Лог в файле (Отобразить)

Но не могу это реализовать, что бы была найдена определенная дата, которая сегодня, например, "[19.04.2019]" И к тому же искал вот из того что ниже это даты количество строк свободных и добавлял ниже новое для блока этой даты.
А все старое остается выше как сейчас в примере. на следующий день проверит какая сегодня дата и если в файле не найдена "[20.04.2019]", то добавить в самый конец и потом уже после создания блока даты, т.е строчки "[20.04.2019]" уже будет добавлятся лог как в список
(Добавление)
ТОт же принцип как у
 Цитата:
WritePrivateProfileString ("Default", "Object_Edit1", format(#Text_Edit1[0]), PathSaveSettings);

Я могу вместо Default поставить свою дату и он будет загружать только из той даты, которая нужна, но тогда он не сможет загружать отдельные строчки и вписывать, т.е дополнять текст этой даты, а он только заменяет.
(Добавление)
Кажется я понял:
нужно создать цикл, который перебирает все строчки в файле и ищет дату, если такой даты нет, то тоздать ее
(Добавление)
CODE:
как вернуть количество строк в файле, что бы заать его в цикле?
if(fopen(temp_fold+"*.txt", "r") != 0)
{
for ()
if(freadline(preiemnik)!=0)
{

}
}
178. Zireael - 19 Апреля, 2019 - 07:18:47 - перейти к сообщению
 Цитата:
WritePrivateProfileString ("Default", "Object_Edit1", format(#Text_Edit1[0]), PathSaveSettings);
Я могу вместо Default поставить свою дату и он будет загружать только из той даты, которая нужна, но тогда он не сможет загружать отдельные строчки и вписывать, т.е дополнять текст этой даты, а он только заменяет.

Можно узнать сколько параметров в блоке Default, соответственно можно получить их содержимое. Дописывать тоже можно.
 Цитата:
как вернуть количество строк в файле

CODE:
string preiemnik[999];
if(fopen("C:\list_file.txt", "r"))
{
for(int i=0; i<sizearray(preiemnik)-1 && freadline(preiemnik[i]); i++){} // прочитать файл в массив

messagebox("Строк в файле: "+format(i));
messagebox("Первая строка: "+preiemnik[0]);
// preiemnik[1] вторая строка и т.д.
fclose();
}
179. 007wan - 19 Апреля, 2019 - 07:46:01 - перейти к сообщению
CODE:
if(fopen(temp_fold+"*.txt", "r"))
{
for(int i=0; i<sizearray(preiemnik)-1 && freadline(preiemnik[i]); i++){}

messagebox("Строк в файле: "+format(i));

for(int ii=0; ii<format(i); ii++)
{

messagebox("строчки: "+preiemnik[format(ii)]);//не работает
}

fclose();
}

(Добавление)
Я все таки начал выдумывать сложный алгоритм, потому что из-за того, что даты меняются, я стал учитывать, что эту дату можно будет поменять на компьютере( или через биос итд) и тогда(возможно я безумен) из-за этого лог станет работать некоректно, потому что если сделать так как я задумывал, то он будет писать текст для реальной даты в прошлую или будущую ячейку в файле. и тогда получится, что, например текст для сегодняшнего дня будет располагаться где-то в середине, т.к программа не сможет вписывать текст в определеную строчку, а только в конец
(Добавление)
Так что помогите написать простой алгоритм:
суть его.
I)Момент, когда откроется программа и начнет загружать текст из файла в лог:
1)проверяет если сегодняшняя дата в файле
Если нашел, то получаем индекс где написана дата и начиная от индекса, где эта дата до того индекса, когда заканчивается весь файл вставляем в список(Listbox)

II)Момент, когда нужно записать в лог:
при записи в лог сохраняет в файл только что написанную строчку(новую), а старые не тронутые, т.е не надо сохранять лог целиком, а только одну строчку
180. Zireael - 19 Апреля, 2019 - 17:53:31 - перейти к сообщению
Для примера:
Создать файл "C:\123.ini" с таким содержимым:
 Цитата:
[18.04.2019]
16:59:38 = Бот остановлен пользователем.
[19.04.2019]
16:59:37 = Бот запущен.
16:59:38 = Бот остановлен пользователем.
16:59:51 = Запуск невозможен. Причина: Браузер не найден.
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[20.04.2019]
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[21.04.2019]
16:59:37 = Бот запущен.

Запустить код, чтобы получить все ключи даты 19.04.2019 и их значение.
CODE:
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");

int length;
char key_ini[99999], value[999];
string path="C:\123.ini"; // путь к ini
string date="19.04.2019";

int x=GetPrivateProfileString (date, 0, 0, address (#key_ini[0]), sizearray(key_ini), path); // получить все ключи
if(x)
{
length=0;
for(int i=0; i+length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path)) // получить значение ключа
{
messagebox(format(#key_ini[length])+" "+format(#value[0]));
}
length=length+size(#key_ini[i])+i+1;
}
}

Powered by ExBB FM 1.0 Final