Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.06.2009, 18:15
DizzWebS вне форума Посмотреть профиль Отправить личное сообщение для DizzWebS Посетить домашнюю страницу DizzWebS Найти все сообщения от DizzWebS
  № 1  
Ответить с цитированием
DizzWebS
 
Аватар для DizzWebS

Регистрация: Apr 2009
Адрес: Новосибирск
Сообщений: 42
Отправить сообщение для DizzWebS с помощью ICQ Отправить сообщение для DizzWebS с помощью Skype™
По умолчанию Поиск по числам на XML не по точным значениям, а варьирующемся (плюс/минус)

Ох, очень надеюсь, что название темы будет соответствовать содержанию мне очень нужна помощь по этой теме. В общем на сайте flash.demiart хороший человек с ником Chibis выложил отличный пример с поиском внутри флеша с использованием XML. Я его маленько переделал под себя, и вот что получилось:
Код AS1/AS2:
stop();
Stage.scaleMode = "NoScale";
 
////////// Загрузка XML, тут все просто стандартная загрузка файла
var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.load("Find.xml");
import mx.controls.alert;
myXML.onLoad = function(success) {
if (success) {
populateTable();
} else {
result_text.text = "Данные небыли загружены"+"\r"+"Файл: Find.xml"+"\r"+"небыл найден!"
}
};
////////////////////////////////////// Загрузка XML
 
////////////////////////////////////// Datagrid, функция создания компонента DataGrid
function populateTable() {
var list:Array = new Array(); //создаем массив элементов для dataProvider
for (n=0; n<myXML.firstChild.childNodes.length; n++) { //в цыкле перебираем весь хмл файл по нодам
 //создаем переменну для 1 колонки (ID) DataGrid
 var dlin = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
 //создаем переменну для 2 колонки (Документы) DataGrid
 var shir = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
 //создаем объект для записи всех разделенных нодов, то есть в компоненте создаем сами колонки и заполняем их
 var vis = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue;
 var nazv = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
 var myRow:Object = {Длина:dlin, Ширина:shir, Высота:vis, Название:nazv};
 list.addItem(myRow);
 ///////////////////////////
}
myTable.dataProvider = list; //выводим в компонент ранее созданный и заполненный массив
myTable.getColumnAt(0).width = 55; //задаем ширину колонки ID
myTable.getColumnAt(1).width = 55;
myTable.getColumnAt(2).width = 55;
}
////////////////////////////////////// Datagrid
 
 
//////////////////////////////////////////////////////////////////// Поиск
///////////////// Поиск ДЛИНЫ
function search_dlin(myText) {
var list:Array = new Array(); // создаем массив
var Criteria = myText; //Создаем переменную
Criteria = Criteria.toLowerCase(); //задаем параметр, что весь текст будет с маленькой буквы
for (n=0; n<myXML.firstChild.childNodes.length; n++) { // перебираем в цыкле ноды
 
 // Это собственно и есть сам поиск indexOf(Criteria) != -1, более подробно написанно в хелпе про indexOf
 if (myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue.toLowerCase().indexOf(Criteria) != -1) {
  var dlin = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
  var shir = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
  var vis = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue;
  var nazv = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
 
  var myRow:Object = {Длина:dlin, Ширина:shir, Высота:vis, Название:nazv};
  list.addItem(myRow);
 }
}
result_text.text = "Вы искали: " + mine.text + "   Найдено " + list.length //Выводим в текстовое поле результат поиска
myTable.dataProvider = list;
}
///////////////// Поиск ШИРИНЫ
 
///////////////// Поиск по документу, все тоже самое, за единственным исключением путей до нодов
function search_shir(myText) {
 
var list:Array = new Array();
var Criteria = myText;
Criteria = Criteria.toLowerCase();
for (n=0; n<myXML.firstChild.childNodes.length; n++) {
 if (myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue.toLowerCase().indexOf(Criteria) != -1)
 {
  var dlin = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
  var shir = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
  var vis = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue;
  var nazv = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
 
  var myRow:Object = {Длина:dlin, Ширина:shir, Высота:vis, Название:nazv};
  list.addItem(myRow);
 
 }
}
result_text.text = "Вы искали: " + mine.text + "   Найдено " + list.length //Выводим в текстовое поле результат поиска
myTable.dataProvider = list;
}
 
//////ПОИСК ВЫСОТЫ
function search_vis(myText) {
 
var list:Array = new Array();
var Criteria = myText;
Criteria = Criteria.toLowerCase();
for (n=0; n<myXML.firstChild.childNodes.length; n++) {
 if (myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue.toLowerCase().indexOf(Criteria) != -1)
 {
  var dlin = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
  var shir = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
  var vis = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue;
  var nazv = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
 
  var myRow:Object = {Длина:dlin, Ширина:shir, Высота:vis, Название:nazv};
  list.addItem(myRow);
 
 }
}
result_text.text = "Вы искали: " + mine.text + "   Найдено " + list.length //Выводим в текстовое поле результат поиска
myTable.dataProvider = list;
}
 
/////Поиск по НАЗВАНИЮ
 
function search_nazv(myText) {
 
var list:Array = new Array();
var Criteria = myText;
Criteria = Criteria.toLowerCase();
for (n=0; n<myXML.firstChild.childNodes.length; n++) {
 if (myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue.toLowerCase().indexOf(Criteria) != -1)
 {
  var dlin = myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue;
  var shir = myXML.firstChild.childNodes[n].firstChild.nextSibling.firstChild.nodeValue;
  var vis = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.firstChild.nodeValue;
  var nazv = myXML.firstChild.childNodes[n].firstChild.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
 
  var myRow:Object = {Длина:dlin, Ширина:shir, Высота:vis, Название:nazv};
  list.addItem(myRow);
 
 }
}
result_text.text = "Вы искали: " + mine.text + "   Найдено " + list.length //Выводим в текстовое поле результат поиска
myTable.dataProvider = list;
}
 
///////////////// Поиск по документу
//////////////////////////////////////////////////////////////////// Поиск
 
////////////////////////////////////////// Вывод значения дополнительного нода для привязки действия при клике мышью
function showDetails() {
for (n=0; n<myXML.firstChild.childNodes.length; n++) {
 if (myXML.firstChild.childNodes[n].firstChild.firstChild.nodeValue.indexOf(myTable.selectedItem.Длина) != -1) {
 _root.gotoAndPlay(myXML.firstChild.childNodes[n].lastChild.firstChild);
 }
}
}
////////////////////////////////////////// Вывод
 
 
 
/////////////////////////////////////// Кнопки
import mx.controls.RadioButton; //компонет RadioButton
rb_dlin.selected = true; //Обозначаем который будет выделен по умолчанию
 
/////////////////////////////////////Функция нажатия кнопки "Искать"
searchDB.onRelease = function() {
if (rb_dlin.selected == true) { //Проверяем если выделен 1 компонент то запускаем функцию search_Id(mine.text), см. выше
 search_dlin(mine.text);
} 
if (rb_shir.selected == true) { 
 search_shir(mine.text);
}
if (rb_vis.selected == true) { 
 search_vis(mine.text);
}
if (rb_nazv.selected == true) { 
 search_nazv(mine.text);
}
}
Selection.setFocus(mine); //Задаем фокус текстовому полю mine для ввода слов поиска
 
 
 
///////Действие при клике мышью
var DBdisplay = new Object();
DBdisplay.change = function(eventObject) {
showDetails(); //При клике запускаем функцию showDetails(), см. выше
};
myTable.addEventListener("change", DBdisplay);
ДЛЯ ТЕХ, КТО НЕ ХОЧЕТ РАЗБИРАТЬ КОД: суть такова: есть 4 столбика, в которые подгружается информация из xml файла. Первые три я использую только для чиловых значений, четвёртый - текстовая часть. Саму флешку можно увидеть по ссылке: http://rebellion.talk4fun.net/find.swf либо http://warezsoft.22web.net/find.swf либо http://www.renaissance.tu2.ru/find.swf (Это другой хостер, а то почему то блин отваливаются ссылки всё время..)

НАДО: чтобы в первых трёх столбиках(где только числовое значение), была возможность поиска чисел в пределах, ну к примеру 200, или 300.
Тоесть например: есть несколько чисел там... 5500, 4900, 5124. И когда в строку поиска вбивают число 5000, то нашлись бы строки с числами 4900 и 5124, а 5500 уже нет, т.к. не в этом пределе..
Подскажите, где код так подковырнуть надо, чтобы он начал числа так искать, пожалуйста.

Добавлено через 10 минут
хм, посмотрел на код именно на форуме, где всё "видно" глазами. indexOf(Criteria) - это то, что мне надо, или нет? Сча поищу на эту тему

Добавлено через 14 минут
Эх, не то..

Добавлено через 38 минут
кажется до меня начинает доходить, что надо подставить всего лишь какой-то текст в обработчик нажатия кнопки...

Добавлено через 38 минут
тоесть вот сюда:
Код AS1/AS2:
searchDB.onRelease = function() {
if (rb_dlin.selected == true) { //Проверяем если выделен 1 компонент то запускаем функцию search_Id(mine.text), см. выше
 search_dlin(mine.text);
} 
if (rb_shir.selected == true) { 
 search_shir(mine.text);
}
if (rb_vis.selected == true) { 
 search_vis(mine.text);
}
if (rb_nazv.selected == true) { 
 search_nazv(mine.text);
}
Добавлено через 56 минут
помогите пожалуйста, народ Ищу ищу, ничё найти не могу толком.. хоть подтолкните в каком направлении искать..

Добавлено через 2 часа 0 минут
Я уже думаю через Math.random каким-то макаром сделать. Ну где вы, профи?
__________________
ReAlly ExPloOiT


Последний раз редактировалось DizzWebS; 21.06.2009 в 20:14.
Старый 21.06.2009, 22:14
DizzWebS вне форума Посмотреть профиль Отправить личное сообщение для DizzWebS Посетить домашнюю страницу DizzWebS Найти все сообщения от DizzWebS
  № 2  
Ответить с цитированием
DizzWebS
 
Аватар для DizzWebS

Регистрация: Apr 2009
Адрес: Новосибирск
Сообщений: 42
Отправить сообщение для DizzWebS с помощью ICQ Отправить сообщение для DizzWebS с помощью Skype™
теперь понял, что то, что написал выше про кнопку - бред. Не там искать надо.
__________________
ReAlly ExPloOiT

Старый 23.06.2009, 23:00
Mnilionic вне форума Посмотреть профиль Отправить личное сообщение для Mnilionic Найти все сообщения от Mnilionic
  № 3  
Ответить с цитированием
Mnilionic
 
Аватар для Mnilionic

Регистрация: Aug 2005
Адрес: я из Ленинграда
Сообщений: 1,082
Отправить сообщение для Mnilionic с помощью ICQ
сравнивать каждое значение с вашими пределами.
Код AS1/AS2:
var padding = 50;
if( num_row > num_search - padding && num_row < num_search + padding) trace('в пределах');

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:23.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:23.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.