Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Перебор элементов массива (http://www.flasher.ru/forum/showthread.php?t=155325)

Mulin 02.05.2011 19:03

Перебор элементов массива
 
Вложений: 1
Есть масив, элементы которого беруться из XML файла. Циклом перебераю элементы массива и сравниваю с эталонным, при совпадении код должене выдать номер элемента массива. Это не происходит, где моя ошибка?
Код и исходник прилагаю
Код AS1/AS2:

var name_ind:Array = new Array();
var XMLfile:XML = new XML();
XMLfile.load("score.xml");
XMLfile.ignoreWhite = true;
XMLfile.onLoad = zagr;
function zagr()
{
        vsego = XMLfile.childNodes.length;
        for (var i:Number = 0; i < XMLfile.childNodes.length; i++)
        {
                name_ind[i] = XMLfile.childNodes[i].childNodes[0].firstChild;
                if(name_ind[i]=="Иван")
                {
                          trace(i);
                }
        }
}


mooncar 02.05.2011 19:30

Надо так.
Код AS1/AS2:

if (String(name_ind[i]) == 'Иван')

А еще лучше при парсинге:
Код AS1/AS2:

        for (var i:Number = 0; i < XMLfile.childNodes.length; i++)
        {
                name_ind[i] = XMLfile.childNodes[i].childNodes[0].firstChild.toString();
        }

А вообще используйте атрибуты и не понадобится громоздкий цикл для таких проверок, какой же id у юзера:
Код AS1/AS2:

var name_ind:Array = new Array();
var XMLfile:XML = new XML();
XMLfile.load("score.xml");
XMLfile.ignoreWhite = true;
XMLfile.onLoad = zagr;
function zagr()
{
        var xmlnode:XMLNode = XMLfile.firstChild;
        vsego = xmlnode.childNodes.length;
        for (var i:Number = 0; i < vsego; i++)
        {
                var id:Number = Number(xmlnode.childNodes[i].attributes['id'])
                name_ind[id] = xmlnode.childNodes[i].firstChild.toString();
                trace('id:' +  id + ' name: ' + name_ind[id]);
        }
 
}

Код:

<?xml version="1.0" encoding="utf-8"?>
<plaers>
        <name id="1">Иван</name>
        <name id="2">Петр</name>
        <name id="3">Сидр</name>
</plaers>

Так получится массив, где индексы - это id юзеров из атрибутов и всегда можно по ним обратиться.

Mulin 02.05.2011 19:37

Ой спасибо выручили. А ведь действительно String. Упустил каюсь

mooncar 02.05.2011 19:41

См. обновленной пост выше.

Mulin 02.05.2011 19:45

И еще вопрос. В случе
Код AS1/AS2:

if (String(name_ind[i]) == 'Иван')

Переменная "Иван" уже зашита в код, но эту переменную будет вводить пользователь в поле ввода
Код AS1/AS2:

input_name.text

А в этом случае код
Код AS1/AS2:

if (String(name_ind[i]) == input_name.text)

и
Код AS1/AS2:

if (String(name_ind[i]) == String(input_name.text))

несрабатывает. В чем может быть дело?

mooncar 02.05.2011 19:53

В чем угодно, синтаксически всё верно. Обе части имеют один тип, и если и тут и там "Иван", то проблема где-то еще.
Например, момент для проверки выбран неправильно: либо данные еще не получены, либо проверка осуществляется когда-то не тогда, когда ввод еще не осущ-н.

Mulin 02.05.2011 20:10

Спасибо, буду разбираться, на упрощенном варианте работает, думаю действительно проблема в синтаксисе где-то

Добавлено через 8 минут
Разобрался, проблема была в том, что не был внедрен шрифт поля input. Вот уж где обжегся...

Arkadiy 03.05.2011 14:31

Спасибо за интересную тему и примеры. У меня есть вопрос, да, не используя атрибуты код становится слишком громоздким порой, но я где то читал, что использование атрибутов не желательно, но в чем конкретно это выражается, какие накладываются ограничения? Если можете, поясните пожалуйста, я бы тогда с радостью "перешел на атрибуты".

mooncar 03.05.2011 17:38

Увы, в теории не силен. Найдете, где читали, киньте ссылочку, интересно.

Hauts 03.05.2011 17:53

Атрибуты xml вы имеете в виду?


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

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