PDA

Просмотр полной версии : Проблема с загрузкой данных из *.txt и преобразование их в combobox и list


_bioscorpio_
08.02.2007, 14:03
Всем привет :bye:

Загружаю данные из текстовика и чето он не хочет загражать как мне нужно.

во флешке
System.useCodepage = true;
txt = new LoadVars();
txt.load("start.txt");
txt.onLoad = function() {
txt_ID1 = this.ID1.split("^").concat();
for (i=0; i<=txt_ID1.length; i++) {
_glavi_.addItem(txt_ID1[i]);
}
txt_ID2 = this.ID2.split("|").concat();
txt_ID3 = this.ID2.split("^").concat();
for (i=0; i<=txt_ID3.length; i++) {
podglavi.addItem(txt_ID2[i]);
}
};
function change(evt) {
//trace(evt.target.selectedItem.label);
}
_glavi_.addEventListener("change", this);

_glavi_ - ComboBox
podglavi - List

в текстовике
//*Главы*//
&ID1=1^2^3^4^5&

//*Содержание глав*//
&ID2=1_1|1_2|1_3^2_1|2_2|2_3^3_1|3_2|3_3|^4_1|4_2|4_3^5_1|5_2|5_3&

//*Путь на файл к содержанию глав*//
&ID3=www.1.ru|www.1.ru|www.1.ru^www.2.ru|www.2.ru|www.2.ru&
1 проблема:
Откуда береться undefined,undefined, в component.ComboBox? Все остальное то он вставляет в него нормально...
2 проблема:
Загружаю данные и ни как не могу их разделить толком вставив в component.List?
3 проблема
Как упралять ComboBox? Хочу чтоб при нажатии на в ComboBox "1", в component.List появлялись строки
1_1
1_2
1_3
и т.д., а он сволоч не дает :wacko:

подскажите, отстал от жизни...

etc
08.02.2007, 14:39
useCodepage — зло.
Комментарии в текстовом файле убери, потому что это данные, а не комментарии.
А ещё лучше пользовать XML для подобных вещей.

_bioscorpio_
08.02.2007, 14:42
__etc
Да я бы с радостью все поменял если бы знал как обращаться с XML :rolleyes:

etc
08.02.2007, 14:47
Самое время научиться.
http://livedocs.macromedia.com/flash/8/main/00001592.html

_bioscorpio_
08.02.2007, 14:55
___ect
хорошо я почитаю. может все же поможете как так сделать. а?

etc
08.02.2007, 14:57
Не знаю, такая организация данных заведомо гиблая, поэтому, если кому-то хочется помочь её реализовать — пожалуйста. А я пас, я бы переделал в XML.

Kogrom
08.02.2007, 16:03
Похожая проблема тут (http://flasher.ru/forum/showthread.php?t=91633).
Файл лучше сохранять в кодировке UTF с сигнатурой (блокнот автоматически добавляет сигнатуру в текстовый файл). Тогда useCodepage не будет злом.

etc
08.02.2007, 16:19
Он не будет злом, потому что станет ненужным. А вот сигнатура лишняя.

_bioscorpio_
08.02.2007, 16:42
ладно, переделал.

во флехе var lan:XML = new XML();
var masterArray:Array = new Array();
lan.ignoreWhite = true;
lan.load("asd.xml");
lan.onLoad = function(success) {
var currentLangNode:XMLNode = this.firstChild.firstChild;
var i:Number = 0;
for (var childNode = currentLangNode; childNode != null; childNode=childNode.nextSibling, i++) {
var j:Number = 0;
masterArray[i] = new Array();
masterArray[i][0] = childNode.nodeName;
j++;
for (var stringNode:XMLNode = childNode.firstChild; stringNode != null; stringNode=stringNode.nextSibling, j++) {
masterArray[i][j] = stringNode.firstChild.nodeValue;
}
}
for (var k = 0; k<masterArray.length; k++) {
glavi.addItem(masterArray[k][0]);
}
};
var evt:Object = new Object();
evt.change = function(eventObj) {
txt.removeAll();
for (var l = 0; l<masterArray.length; l++) {
if (masterArray[l][0] == eventObj.target.value) {
txt.addItem(masterArray[l][1]);
trace(masterArray[l][1]);
}
}
};
glavi.addEventListener("change", evt);


в XML<strings>
<1>
<1_1>
<url>1_1.txt</url>
</1_1>
<1_2>
<url>1_2.txt</url>
</1_2>
<1_3>
<url>1_3.txt</url>
</1_3>
</1>
<2>
<2_1>
<url>1_1.txt</url>
</2_1>
<2_2>
<url>1_2.txt</url>
</2_2>
<2_3>
<url>1_3.txt</url>
</2_3>
</2>
<3>
<3_1>
<url>1_1.txt</url>
</3_1>
<3_2>
<url>1_2.txt</url>
</3_2>
<3_3>
<url>1_3.txt</url>
</3_3>
</3>
</strings>

Все равно не работает. Как заставить все это выстраиваться как нужно?
3 проблема

etc
08.02.2007, 17:23
var listXML = new XML();
listXML.ignoreWhite = true;
listXML.onLoad = function(success) {
if (!this.loaded||this.status) {
throw new Error('An error occured while loading XML');
return;
}
var nodes = this.firstChild.childNodes;
var nodesLength = nodes.length;
for (var i = 0;i<nodesLength;i++) {
var node = nodes[i];
list_cmb.addItem(node.attributes['label'],node.childNodes);
}
list_cmb.dispatchEvent({type:'change'});
}
var comboboxListener = {};
comboboxListener.change = function(event) {
var nodes = event.target.selectedItem.data;
var nodesLength = nodes.length;
this.items_lst.removeAll();
for (var i = 0;i<nodesLength;i++) {
var node = nodes[i];
this.items_lst.addItem(node.attributes['label'],node);
}
}
comboboxListener.items_lst = items_lst;
var listListener = {};
listListener.change = function(event) {
trace('URL: '+event.target.selectedItem.data.attributes['url']);
}
items_lst.addEventListener('change',listListener);
list_cmb.addEventListener('change',comboboxListener);
listXML.load('asd.xml');
asd.xml:
<?xml version="1.0" encoding="utf-8"?>
<strings>
<list label="1">
<item label="1_1" url="1_1.txt"/>
<item label="1_2" url="1_2.txt"/>
<item label="1_3" url="1_3.txt"/>
</list>
<list label="2">
<item label="2_1" url="2_1.txt"/>
<item label="2_2" url="2_2.txt"/>
<item label="2_3" url="2_3.txt"/>
</list>
<list label="3">
<item label="3_1" url="3_1.txt"/>
<item label="3_2" url="3_2.txt"/>
<item label="3_3" url="3_3.txt"/>
</list>
</strings>
items_lst — List на сцене
list_cmb — ComboBox на сцене

Все-таки мне пришлось сделать за вас вашу работу.

_bioscorpio_
08.02.2007, 17:30
__etc
БОЛЬШОЕ СПАСИБО ТЕБЕ __etc Буду должен!

Kogrom
08.02.2007, 19:22
Он не будет злом, потому что станет ненужным. А вот сигнатура лишняя.Нет. Если сигнатуру оставить, то при System.useCodepage=true будет распознаваться и UTF и ANSI с кирилицей. Без сигнатуры при System.useCodepage=true UTF не будет восприниматься верно.