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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.01.2008, 17:09
Орец вне форума Посмотреть профиль Отправить личное сообщение для Орец Найти все сообщения от Орец
  № 1  
Ответить с цитированием
Орец
[+4 29.10.08]
[+4 31.10.08]

Регистрация: Jan 2008
Сообщений: 38
По умолчанию Заполнение из текстового файла многомерного ассоциативного массива

Возникла необходимость на первом кадре заполнить из текстового файла многомерный ассоциативный массив для того чтобы в дальнейшем к нему обращаться. Отдельно с загрузкой переменных из текстового файла и созданием массивов я разобрался, но достигнутые успехи обо что-то споткнулись и не помогли. Проблем две. Первая - почемуто после заполнения первой строчки массива остальные не заполняются, хотя видно что отработка проходит. Вторая - получается увидеть результат только обращаясь к массиву из самой функции. Мне вообще в виде функции обработчик не нужен, но почему-то работает только там.

Текстовый файл имеет вид таблицы, с разделителями полей символами табуляции, в начало первого поля дописанно "ls=".

Код:
loadVariables("BD.txt", "_root");
lv = new LoadVars();
lv.load("BD.txt");
lv.onLoad= function ()
//if (lv.onLoad)
{
var massiv1:Array = ls.split("\r\n"); //-создаётся массив каждое значение которого содержит строку из файла
var mass:Array;
var massiv:Array;
massiv = new Array(massiv1.length);
for (var i =0; i<massiv1.length; i++)
{
mass = massiv1[0].split("	"); //-разбивка строки на подстроки по символам табуляции
massiv[mass[0]]=mass;//-запись строки разбитой на подстроки в многомерный массив. С именем равным значению первого поля в строке.
}
trace(lv);//-тут выводится целиком файл в нечитаемой кодировке.
trace('***************');
trace(ls);//-тут выводится переменная ls в которую введён весь файл
trace('Число строк массива massiv1= ' +massiv1.length); // 22
trace('Число строк массива massiv= ' +massiv.length);// 2551
trace('Число i= ' +i);//  22
trace('***************');
trace('Первая строка: '+massiv['02550']); //- выводит этот вложенный массив.(Первая строка файла)
trace('***************');
trace('Вторая строка: '+massiv['r2-1']); //-ничего хорошего(должна быть вторая строка)
}


Последний раз редактировалось Орец; 10.01.2008 в 17:16. Причина: Дополнение кода коментариями
Старый 10.01.2008, 17:27
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 2  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Забавное имя: 'r2-1'

Старый 10.01.2008, 17:34
Орец вне форума Посмотреть профиль Отправить личное сообщение для Орец Найти все сообщения от Орец
  № 3  
Ответить с цитированием
Орец
[+4 29.10.08]
[+4 31.10.08]

Регистрация: Jan 2008
Сообщений: 38
Цитата:
Сообщение от chingachgoog
Забавное имя: 'r2-1'
Большинство имён -цифровой номер. Там где у объекта нет номера, но сам он присутствует идентификатор пришлось придумывать, в данном случае он обозначает, что это первый нестандартный объект со второй страницы.

Старый 10.01.2008, 17:53
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 4  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Есть четкие правила допустимых имен переменных, именно поэтому я назвал имя 'r2-1' забавным.

Старый 10.01.2008, 18:15
Орец вне форума Посмотреть профиль Отправить личное сообщение для Орец Найти все сообщения от Орец
  № 5  
Ответить с цитированием
Орец
[+4 29.10.08]
[+4 31.10.08]

Регистрация: Jan 2008
Сообщений: 38
Совсем забыл. Текстовый файл из которого заполняется массив приложен. Если кто знает как заставить правильно работать - напишите об этом тут!
Вложения
Тип файла: txt BD.txt (2.6 Кб, 99 просмотров)


Последний раз редактировалось Орец; 10.01.2008 в 18:58.
Старый 28.01.2008, 12:06
Орец вне форума Посмотреть профиль Отправить личное сообщение для Орец Найти все сообщения от Орец
  № 6  
Ответить с цитированием
Орец
[+4 29.10.08]
[+4 31.10.08]

Регистрация: Jan 2008
Сообщений: 38
Что-то тема совсем уползла.
Ладно пока-что решил создавать матрицу в экселе и вставлять в код. Изменять значения не придётся, только добавлять новые строки. Так что не критично.
Но узнать решение было бы интересно. Вдруг потом пригодится когда.

Старый 28.01.2008, 13:16
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 7  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Код:
arr=[]
arr['02550']=321
arr['r2-1']=123 
trace(arr['02550']+" "+arr['r2-1'])
Ошибки нет. Но в данном случае это особенность создания массивов во флеше. По сути "настоящих" массивов во флеше нет. Есть некая имитация массивов и массив во флеше - это просто объект у которого есть дополнительное свойство length.
А сами объекты во флеше - это ассоциативные массивы или множества.

Цитата:
Сообщение от Гурский
При реализации множеств используются идеи хэш-кодирования. Поэтому их часто называют хэшами. ...Адресом нужного объекта данных является его имя. Дело в том, что любую строковую последовательность можно представить как число. Опираясь на это число, можно выделить для объекта данных область памяти с определенным адресом. Именно
это и делается при создании элемента хэша. Затем, при обращении к элементу, нужно лишь повторно вычислить по переданному имени адрес в памяти, который он занимает. Функция, преобразующая строковые последовательности в адреса в хэш-таблице, называется хэш-функцией.
Т.е. 'r2-1' в массиве arr - это не переменная 'r2-1' (см. в хелпе главу именование переменных), а строковый адрес ячейки массива.

Старый 28.01.2008, 15:05
Орец вне форума Посмотреть профиль Отправить личное сообщение для Орец Найти все сообщения от Орец
  № 8  
Ответить с цитированием
Орец
[+4 29.10.08]
[+4 31.10.08]

Регистрация: Jan 2008
Сообщений: 38
дело в том что если дать иное название, работать от этого функция не начинает
Впрочем если прописать в ручную то всё работает.
Вот и хоетелось бы понять, почему в ручную имитация многомерного ассоциативного массива создаётся, а в моей функции из текстового файла не хочет

Старый 28.01.2008, 15:45
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 9  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
я не совсем понял каким образом вы формируете эти самые массивы, но тем не менее исправил ряд ошибок в вашем коде (надеюсь, что новых не добавил)
Код:
//loadVariables("BD.txt", "_root");
lv = new LoadVars();
lv.load("BD.txt");
lv.onLoad = function() {
	var massiv1:Array = lv.ls.split("\r\n");
	//-создаётся массив каждое значение которого содержит строку из файла
	var mass:Array = [];
	var massiv:Array = [];
	massiv = new Array(massiv1.length);
	for (var i = 0; i < massiv1.length; i++) {
		mass = massiv1[i].split("\t");
		//-разбивка строки на подстроки по символам табуляции
		massiv[mass[0]] = mass;
		//-запись строки разбитой на подстроки в многомерный массив. С именем равным значению первого поля в строке.
	}
	//trace(lv);
	//-тут выводится целиком файл в нечитаемой кодировке.
	trace('***************');
	trace(lv.ls);
	//-тут выводится переменная ls в которую введён весь файл
	trace('Число строк массива massiv1= ' + massiv1.length);
	// 22
	trace('Число строк массива massiv= ' + massiv.length);
	// 2551
	trace('Число i= ' + i);
	//  22
	trace('***************');
	trace('Первая строка: ' + massiv['02550']);
	//- выводит этот вложенный массив.(Первая строка файла)
	trace('***************');
	trace('Вторая строка: ' + massiv['r2-1']);
	//-чегото хорошее появилось:):):):)
};

Старый 28.01.2008, 17:15
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 10  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
alexcon314 верно нашел ошибку:

вместо
Код:
for (var i =0; i<massiv1.length; i++) {
mass = massiv1[0].split("	"); //-разбивка строки на подстроки по символам табуляции
...
надо конечно же

Код:
for (var i =0; i<massiv1.length; i++){
		mass = massiv1[i].split("	"); //-разбивка строки на подстроки по символам табуляции
Но самым прикольным, конечно же оказался код задания ассоциативного массива:
Код:
massiv[mass[0]]=mass;
где mass[0] - это строка

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

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

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


 


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


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