![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+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. Причина: Дополнение кода коментариями |
|
|||||
|
[+4 29.10.08]
[+4 31.10.08] Регистрация: Jan 2008
Сообщений: 38
|
Цитата:
![]() |
|
|||||
|
[+4 29.10.08]
[+4 31.10.08] Регистрация: Jan 2008
Сообщений: 38
|
Совсем забыл. Текстовый файл из которого заполняется массив приложен. Если кто знает как заставить правильно работать - напишите об этом тут!
![]() Последний раз редактировалось Орец; 10.01.2008 в 18:58. |
|
|||||
|
[+4 29.10.08]
[+4 31.10.08] Регистрация: Jan 2008
Сообщений: 38
|
Что-то тема совсем уползла.
Ладно пока-что решил создавать матрицу в экселе и вставлять в код. Изменять значения не придётся, только добавлять новые строки. Так что не критично. Но узнать решение было бы интересно. Вдруг потом пригодится когда. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Ошибки нет. Но в данном случае это особенность создания массивов во флеше. По сути "настоящих" массивов во флеше нет. Есть некая имитация массивов и массив во флеше - это просто объект у которого есть дополнительное свойство length.
А сами объекты во флеше - это ассоциативные массивы или множества. Цитата:
|
|
|||||
|
[+4 29.10.08]
[+4 31.10.08] Регистрация: Jan 2008
Сообщений: 38
|
дело в том что если дать иное название, работать от этого функция не начинает
![]() Впрочем если прописать в ручную то всё работает. Вот и хоетелось бы понять, почему в ручную имитация многомерного ассоциативного массива создаётся, а в моей функции из текстового файла не хочет ![]() |
|
|||||
|
listener
|
я не совсем понял каким образом вы формируете эти самые массивы, но тем не менее исправил ряд ошибок в вашем коде (надеюсь, что новых не добавил
)//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']);
//-чегото хорошее появилось:):):):)
};
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
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(" "); //-разбивка строки на подстроки по символам табуляции
где mass[0] - это строка |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:18. |
|
|
« Предыдущая тема | Следующая тема » |
|
|