Вверх ↑
Этот топик читают: Гость
Ответов: 321
Рейтинг: 10
#1: 2018-06-24 05:11:06 ЛС | профиль | цитата
Привет ребята, подскажите пожалуйста, как можно отфильтровать строки в таблице stringTable c 5 колонками на повторы, где разница все лишь в одной колонке...
Извиняюсь, за прямоту, но, 2 дня голову ломал, решил сдаться, может кто подскажет
В таблице нужно отфильтровать строки с одинаковыми координатами. То есть, если есть 2 объекта с одинаковым xyz, то удалить второй, оставлять только 1 объект с уникальным xyz.

ArrayFilterRepeats - Компонент предназначен для фильтрации повторяющихся элементов в массиве
ArrayCountRepeats - Компонент предназначен для подсчета повторяющихся элементов в массиве
Хорошие компоненты, но они не выдают индексы повторяющихся строк, так бы было слишком легко)


Add(MainForm,2953706,147,119)
{
Width=631
Height=462
}
Add(HTTPClient,6804313,406,126)
{
URL="ff.zzz.com.ua/install.php"
Method=1
AutoRedirect=0
EncType=1
Point(PostData)
link(onFinish,2930276:doCharset,[])
link(PostData,4542924:FString,[])
}
Add(Thread,13433985,308,119)
{
Delay=0
FastStop=0
link(onExec,7274664:doEvent1,[])
}
Add(FormatStr,4542924,420,70)
{
DataCount=1
Mask="k=1000\r\nrealm=WoW Circle x1 PvE Virgin"
Point(FString)
}
Add(Charset,2930276,462,133)
{
Type=7
link(onCharset,1902527:doSearch,[])
}
Add(BlockFind,1902527,518,133)
{
IncludeBlock=1
StartBlock="!s!"
EndBlock="!e!"
link(onSearch,7058878:doAdd,[])
link(onEndSearch,1271730:doEnum,[(572,146)(572,216)])
}
Add(StrList,7058878,581,133)
{
}
Add(Button,15168418,252,119)
{
Left=5
Top=5
link(onClick,13433985:doStart,[])
}
Add(ArrayEnum,1271730,595,210)
{
link(onItem,8037737:doAdd,[])
link(Array,7058878:Array,[])
}
Add(Hub,7274664,364,119)
{
link(onEvent1,4542924:doString,[(399,125)(399,76)])
link(onEvent2,6804313:doLoadString,[])
}
Add(StringTable,8037737,721,210)
{
Left=5
Top=30
Width=600
Height=384
Columns=#9:Map ID=50|11:Локация=150|10:Объект=150|4:X=70|4:Y=70|4:Z=70|
Grid=0
Redaction=1
ColumnClick=1
HeaderDragDrop=0
Point(Strings)
Point(onColumnClick)
Point(doSortDigit)
Point(doSort)
link(onColumnClick,1332915:doCompare,[(772,223)(772,312)(639,312)(639,251)])
}
Add(If_else,1332915,651,245)
{
Type=2
Op2=Integer(2)
link(onTrue,8037737:doSortDigit,[])
link(onFalse,8037737:doSort,[])
}


Редактировалось 3 раз(а), последний 2018-06-24 05:26:52
карма: 1

0
vip
#1.1контекстная реклама от партнеров
Ответов: 16884
Рейтинг: 1239
#2: 2018-06-24 09:15:59 ЛС | профиль | цитата
Проверять на повтор перед занесением в StringTable.
Проверка на
Master4eG писал(а):
с одинаковым xyz

Add(BlockFind,1902527,637,210)
{
IncludeBlock=1
StartBlock="!s!"
EndBlock="!e!"
link(onSearch,16250861:doValue,[(681,216)(681,153)])
link(onEndSearch,1271730:doEnum,[(682,223)(682,293)])
}
Add(StrList,7058878,917,231)
{
link(Str,16250861:Value,[(923,190)(699,190)])
}
Add(ArrayEnum,1271730,931,287)
{
link(onItem,8037737:doAdd,[])
link(Array,7058878:Array,[])
}
Add(StringTable,8037737,973,287)
{
Left=5
Top=30
Width=600
Height=384
Columns=#9:Map ID=50|11:Локация=150|10:Объект=150|4:X=70|4:Y=70|4:Z=70|
Grid=0
Redaction=1
ColumnClick=1
HeaderDragDrop=0
Point(Strings)
Point(onColumnClick)
Point(doSortDigit)
Point(doSort)
link(onColumnClick,1332915:doCompare,[(1013,300)(1013,357)(926,357)(926,328)])
}
Add(If_else,1332915,931,322)
{
Type=2
Op2=Integer(2)
link(onTrue,8037737:doSortDigit,[])
link(onFalse,8037737:doSort,[])
}
Add(MultiStrData,4917458,791,147)
{
Count=3
}
Add(StrList,11889901,791,217)
{
Point(StrToFind)
Point(doGetIndex)
Point(onGetIndex)
link(Str,7743870:Var2,[])
link(StrToFind,7743870:Var3,[(811,208)])
link(onGetIndex,3661058:doCompare,[])
}
Add(Hub,12959031,735,147)
{
link(onEvent1,4917458:doSplit,[])
link(onEvent2,11889901:doGetIndex,[(770,160)(770,265)])
}
Add(GetDataEx,7743870,791,203)
{
link(Data,4917458:RemaindStr,[])
}
Add(If_else,3661058,840,224)
{
Op1=Integer(-1)
link(onTrue,13720557:doEvent1,[])
}
Add(Hub,13720557,889,224)
{
link(onEvent1,11889901:doAdd,[(913,230)(913,195)(779,195)(779,223)])
link(onEvent2,7058878:doAdd,[])
}
Add(Memory,16250861,693,147)
{
link(onData,12959031:doEvent1,[])
}


Редактировалось 1 раз(а), последний 2018-06-24 09:22:15
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 321
Рейтинг: 10
#3: 2018-06-24 16:32:36 ЛС | профиль | цитата
Tad, спасибо большое, важный участок схемы, сам бы я намудрил такого...
Мозг совсем уже не соображал. Там у меня фильтры и по локациям, и по объектам еще, короче каша.
Спасибо еще раз, надеюсь не сильно Вас озадачил.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#4: 2018-06-26 16:33:29 ЛС | профиль | цитата
Master4eG писал(а):
Там у меня фильтры и по локациям, и по объектам еще,
Да... Сбор статистики - великое дело.
Если из 77 кружек пива вычесть свой возраст и добавить 40 стопок водки, то узнаешь свой год рождения.


Редактировалось 1 раз(а), последний 2018-06-26 16:34:05
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#5: 2018-06-26 16:53:02 ЛС | профиль | цитата
Tad писал(а):
Если из 77 кружек пива вычесть свой возраст и добавить 40 стопок водки, то узнаешь свой год рождения.

Эта формула брешет на один год. Надо на одну кружку больше выпить или на одну стопку

Редактировалось 1 раз(а), последний 2018-06-26 16:54:31
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#6: 2018-06-30 09:19:28 ЛС | профиль | цитата
Master4eG, удобнее всего фильтровать записи, поместив их в таблицу БД.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 321
Рейтинг: 10
#7: 2018-06-30 17:09:22 ЛС | профиль | цитата
Tad писал(а):
Master4eG, удобнее всего фильтровать записи, поместив их в таблицу БД.


Для работы с бд, насколько я понял нужен sqlite3.dll.
А у меня приложение из одного .exe файла. Из-за одной бд не хотелось бы прилагать к программе еще один файл.
Но, возможно я ошибаюсь.

Изначально я планировал при старте программы создавать дамп db на сервере, через php запрос, и скачивать его для дальнейшей работы. Дамп создал вручную, скачал, но открыть его в hiasm не смог. Идея умерла.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#8: 2018-06-30 20:08:13 ЛС | профиль | цитата
Master4eG писал(а):
Для работы с бд, насколько я понял нужен sqlite3.dll.
Не обязательно. У нас есть sqlite.obj.
SQLite без dll http://forum.hiasm.com/topic/6810

Редактировалось 1 раз(а), последний 2018-06-30 20:23:50
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 321
Рейтинг: 10
#9: 2018-07-21 22:02:41 ЛС | профиль | цитата
Tad, спасибо, не сразу понял как установить, думал это компонент такой , но вроде разобрался.
Пытаюсь перейти с StringTable на MTStrTbl+базы данных...
Но как теперь получить эту таблицу ?!
Подготавливать и формировать строки заранее на сервере, и давать в программу готовые ?!
Типа - INSERT INTO "tab" VALUES('1','2','3','4','5','6'); ?!
______________________________________________________________________________________________________

Помогите пожалуйста разобраться, как лучше выдавать строки в программу.

<?php
$k = $_POST[k];//Типа ключа безопасности, чтобы не отображать результаты скрипта на странице браузера, единственное что придумал :oops:

if ($k == 1000) {
$mysqli = new mysqli('localhost','my_user','my_password','my_db');
if (mysqli_connect_errno()) {exit('Connect failed: '. mysqli_connect_error());}

$realm = mysqli_real_escape_string($mysqli, $_POST['realm']);

$results = $mysqli->query("SELECT mid,loc,obj,x,y,z FROM tp WHERE realm=('$realm')");
while($row = $results->fetch_assoc())
{
echo '!s!'; //Начало строки для работы с BlockFind
echo $row['mid'];
echo ',';
echo $row['loc'];
echo ',';
echo $row['obj'];
echo ',';
echo $row['x'];
echo ',';
echo $row['y'];
echo ',';
echo $row['z'];
echo '!e!'; //Конец строки для работы с BlockFind
}
$results->free(); //Освобождаем используемую память
$mysqli->close(); //Закрываем соединение
}
else
{
echo "ERROR"; //покажет ошибку, если ключ не равен 1000
}
?>

______________________________________________________________________________________________________

Вроде почти работает, но в строках есть символ - '... из-за него как я понимаю не получается отобразить таблицу, верее получается ошибка в DSC_Exec. Как быть ?! Оо
______________________________________________________________________________________________________

sha

Add(MainForm,2953706,287,266)
{
Width=753
Height=449
link(onCreate,1239491:doOpen,[])
}
Add(MTStrTbl,1830435,1064,287)
{
Left=60
Top=45
Width=595
Height=280
Align=5
Name="tb"
link(onColumnClick,11579441:doSort,[])
}
Add(DS_SQLite,1239491,343,280)
{
Name="db"
link(onOpen,13337397:doEvent1,[])
}
Add(DSC_Exec,8371121,889,294)
{
DSManager="db"
link(onError,15683628:doMessage,[])
}
Add(Hub,13337397,399,280)
{
OutCount=3
link(onEvent1,15768085:doString,[(441,286)(441,244)])
link(onEvent2,13433985:doStart,[])
link(onEvent3,5432726:doQuery,[(441,300)(441,342)])
}
Add(Message,15683628,959,301)
{
}
Add(DSC_Query,5432726,469,336)
{
SQL="SELECT * from "tp""
DSManager="db"
link(onQuery,6626314:doAddRow,[])
link(onColumns,6626314:doAddCols,[])
link(onError,14027957:doMessage,[(534,356)(534,384)])
}
Add(MST_DB,6626314,567,336)
{
MSTControl="tb"
}
Add(MST_SortInCol,11579441,1127,294)
{
MSTControl="tb"
Point(doSortDigit)
}
Add(HTTPClient,6804313,525,287)
{
URL="ff.zzz.com.ua/install.php"
Method=1
AutoRedirect=0
EncType=1
PostData="k=1000\r\nrealm=WoW Circle x1 PvE Virgin"
link(onFinish,2930276:doCharset,[])
}
Add(Thread,13433985,469,287)
{
Delay=0
FastStop=0
link(onExec,6804313:doLoadString,[])
}
Add(Charset,2930276,581,294)
{
Type=7
link(onCharset,1902527:doSearch,[])
}
Add(BlockFind,1902527,637,294)
{
IncludeBlock=1
StartBlock="!s!"
EndBlock="!e!"
link(onSearch,10733634:doReplace,[])
}
Add(FormatStr,12071159,777,294)
{
DataCount=1
Mask="INSERT INTO tp VALUES ('%1');"
link(onFString,11504021:doEvent,[])
}
Add(FormatStr,15768085,469,238)
{
DataCount=1
Mask="CREATE TABLE tp (\r\nmid int(10) NOT NULL,\r\nloc varchar(65) NOT NULL,\r\nobj varchar(65) NOT NULL,\r\nx varchar(12) NOT NULL,\r\ny varchar(12) NOT NULL,\r\nz varchar(12) NOT NULL\r\n);\r\n \r\n"
Point(FString)
link(onFString,16014380:doWork1,[(858,244)])
}
Add(HubEx,16014380,854,294)
{
link(onEvent,8371121:doExec,[])
}
Add(Debug,11504021,826,294)
{
link(onEvent,16014380:doWork2,[])
}
Add(Replace,10733634,714,294)
{
SubStr=","
DestStr="','"
link(onReplace,12071159:doString,[])
}
Add(Message,14027957,567,378)
{
}

______________________________________________________________________________________________________

Если создавать дамб бд (вместо построчного добавления) и пробовать подгружать его, то выходит ошибка, так как формат .sql дампа не совсем такой.
Вместо:
INSERT INTO `db` ();
INSERT INTO `db` ();
INSERT INTO `db` ();

Импортируется следующее:
INSERT INTO `db` (`id`, `realm`, `mid`, `a`, `loc`, `obj`, `x`, `y`, `z`, `vip`) VALUES
(),
(),
(),

Компонент DSC_Exec видимо не принимает такой формат .sql...
Если экспортировать не в Быстром режиме, а в Обычный (отображать все возможные настройки), то можно выбрать как надо, но как экспортировать как надо через php скрипт я не знаю , из-за этого решил построчно.

Редактировалось 2 раз(а), последний 2018-07-21 22:33:34
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#10: 2018-07-24 20:05:01 ЛС | профиль | цитата
1. Отправляешь запрос на сервер с любыми, нужными тебе фильтрами.
2. Ответ сразу загоняешь в любую (какая нравится) StringTable.
===============================================================
И не нужно никаких ни BlockFind-ов, ни SQLite.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)