Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-09-2006, 19:32   #1 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
arrays erstellen und sortieren nach array inhalt

guten abend...

ich weiß, ich frage heute oft und viel hier, aber ich bin anscheinend am entscheidenden punkt angelangt...

ich suche hier keine korrrektur, sondern vielmehr einen ansatz.

folgede situation...

ich habe ein xml das z.b. folgenden knoten enthält:

Code:
<item>
	   <land>CH</land>
	   <name>2</name>
	   <strasse>3</strasse>
	   <plz>4</plz>
	   <ort>5</ort>
	   <tel>6</tel>
	   <fax>7</fax>
	   <mail>8</mail>
	   <mailto>9</mailto>
	   <www>10</www>
	   <url>11</url>
</item>
davon gibt es nun einige in diesem xml.

es sollen nun alle ausgelesen werden, nach "land" sortiert und jeweils einem array zugewiesen werden...

ich habe das "befüllen" des xmls so organisiert, dass die länderkürzel, wie "CH" immer gleich vorhanden sind und so ein wert da ist, denn man zum sortieren hernehmen kann...

ich möchte also im prinzip ein array mit allen adressen in "CH" haben, eins mit allen aus "A", allen aus "D" usw...

das ich mit dem sortieren eines xmls nach einem bestimmten wert keine erfahrung habe und auch denke eine vorsortierung im php macht auch nicht soviel sinn (woher soll dann flash wissen, wann "A" aufhört und "D" beginnt), suche ich nun nach einem ansatz, wie ich das anstellen kann...

das sortierte array mit z.b allen stadtorten aus "CH" müsste ja dann 2dimensional sein, damit ich die anderen werte die im eintrag des arrays erster dimension liegt ja auch ansprechen kann... die interne anfrage der einzelnen unterknoten hab ich schon gelöst und mache das bisweilen so:

Code:
function ladeXML() {
haendler_xml = new XML();
haendler_xml.ignoreWhite = true;
haendler_xml.load(xml_h_var);
haendler_xml.onLoad = function() {
	land_array = new Array();
        name_array = new Array();
	strasse_array = new Array();
        plz_array = new Array();
	ort_array = new Array();
	tel_array = new Array();
	fax_array = new Array();
	mail_array = new Array();
	mailto_array = new Array();
	www_array = new Array();
	url_array = new Array();
	for (var b = 0; b<haendler_xml.firstChild.childNodes.length; b++) {
                        land_array[b] =      haendler_xml.firstChild.childNodes[b].childNodes[0].childNodes;
			name_array[b] =      haendler_xml.firstChild.childNodes[b].childNodes[1].childNodes;
			strasse_array[b] =   haendler_xml.firstChild.childNodes[b].childNodes[2].childNodes;
                        plz_array[b] =       haendler_xml.firstChild.childNodes[b].childNodes[3].childNodes;
			ort_array[b] =       haendler_xml.firstChild.childNodes[b].childNodes[4].childNodes;
			tel_array[b] =       haendler_xml.firstChild.childNodes[b].childNodes[5].childNodes;
			fax_array[b] =       haendler_xml.firstChild.childNodes[b].childNodes[6].childNodes;
			mail_array[b] =      haendler_xml.firstChild.childNodes[b].childNodes[7].childNodes;
			mailto_array[b] =      haendler_xml.firstChild.childNodes[b].childNodes[8].childNodes;
			www_array[b] =       haendler_xml.firstChild.childNodes[b].childNodes[9].childNodes;
			url_array[b] =    haendler_xml.firstChild.childNodes[b].childNodes[10].childNodes;		
	}
	geladen_h();
	checkTextLength();
	
};
}
//////////////////////////////////////////////////////////////////////////////////
this.LadeObjX = new LoadVars();
this.LadeObjX.load(xml_h_var);
this.LadeObjX.onLoad = ladeXML;
die funktion geladen_h() weißt dann die inhalte über id einem mc zu, der dann mal anhand der länge aller einträge eines landes die inhalte der "zeile" im frontend übergeben sollte...

ich bedanke mich schon mal für durchlesen und freu mich auf konstruktives

gruß
tom
modul47 ist offline   Mit Zitat antworten
Alt 12-09-2006, 03:29   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
a)
xml's werden nicht sortiert! ist ja so, als wenn du alle (ab)sätze in einem buch alphabetisch sortieren würdest. da käme auch nichts gescheites dabei heraus.

b)
ja dann mach doch ein 2d array. wo ist das problem?
Code:
function fPrint(a) {
	for (var i = 0; i<a.length; i++) {
		trace(a[i].name+" // "+a[i].ort);
	}
}
var a:Array = new Array();
a.push({name:"bbb", ort:"xxx"});
a.push({name:"aaa", ort:"yyy"});
a.push({name:"bbb", ort:"yyy"});
a.push({name:"aaa", ort:"xxx"});
//
a.sortOn(['name', 'ort']);
fPrint(a);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 12-09-2006, 12:21   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Bern, Schweiz
Beiträge: 121
Ich hatte gerade eine änliche Sache, bei welcher ich XML-Einträge nach Datum sortieren musste:

PHP-Code:
function sucheKnotenbezeichnung(KnotengesuchteBezeichnung) {
    for (var 
i=0i<Knoten.childNodes.lengthi++) {
        if (
Knoten.childNodes[i].nodeName == gesuchteBezeichnung) {
            return 
Knoten.childNodes[i];
        }
    }
}

function 
createArrVisitors(vsexvstatusvteaser){

    
ArrVisitors = new Array();

    for(var 
i in xml_visitors.childNodes){

        
ArrVisitor = new Array();
        
ArrVisitor.vdate Number(xml_visitors.childNodes[i].attributes.date);
        
ArrVisitor.vsex xml_visitors.childNodes[i].attributes.sex;
        
ArrVisitor.vname sucheKnotenbezeichnung(xml_visitors.childNodes[i], "name").firstChild;
        
ArrVisitor.vstatement sucheKnotenbezeichnung(xml_visitors.childNodes[i], "statement").firstChild;
                    
        
ArrVisitors.push(ArrVisitor);

    }

    
ArrVisitors.sortOn("vdate", Array.DESCENDING);


Dabei habe ich auch ein zweidimensionales Array aufgebaut (ArrVisitors enthält beliebige Anzahl ArrVisitor). Danach habe ich mit "sortOn" nach "vdate" sortiert. Vielleicht hilft dir das weiter.
Aufrufen kannst du den gewünschten Wert dann zum Beispiel so:
ArrVisitors[i].vname
__________________
Remo

****************
strengen denkt an!
****************

Geändert von Remo (12-09-2006 um 13:39 Uhr)
Remo ist offline   Mit Zitat antworten
Alt 12-09-2006, 12:24   #4 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.347
hatte mal in flashmx einen array prototype geschrieben der 2d arrays sortieren kann. vielleicht ist das ja was:
[stuff] multidimensionales array sortieren -> prototype

cya, sal
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
Chuck Norris hat den Flash Player für alle mobilen Betriebssysteme!
salazar ist offline   Mit Zitat antworten
Alt 12-09-2006, 13:32   #5 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
danke für die reichlichen antworten... werde mir das heute abend mal alles ansehen und wie es aussieht, ist da bestimmt was dabei...

danke
tom
modul47 ist offline   Mit Zitat antworten
Alt 14-09-2006, 16:25   #6 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
Zitat:
Zitat von Remo Beitrag anzeigen
PHP-Code:
function createArrVisitors(vsexvstatusvteaser){ 
hi remo,

ich hab zu deinem script noch ne frage:
in der zitierten zeile schreibst du die 3 parameter in die funktion, aber ich versteh nicht ganz, was du da übergibst, und wie du die funktion dann aufrufst...
vsex wird in der funktion ja noch weiterverwendet, die andern beiden nicht...
*grübel*

ansonsten hilft mir das schon etwas, da es wirklich in eine ähnliche richtung geht...

danke, tom
modul47 ist offline   Mit Zitat antworten
Alt 14-09-2006, 19:38   #7 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Bern, Schweiz
Beiträge: 121
Entschuldige modul47, ich habe die funktion aus einer bestehenden Applikation herauskopiert. Dort konnte dann mit den Parametern vsex, vstatus, und vteaser beim Befüllen des Arrays nach Kriterien abgefüllt werden.
Der Selektionsteil habe ich beim Post im Forum herausgelöscht, nicht aber die Funktionsparameter.
Du kannst die Funktion also einfach mit
function createArrVisitors(); aufrufen und die Parameter bei der Funktion in den runden Klammern löschen.
Die Funktion "sucheKnotenbezeichnung" ist übrigens recht hilfreich für mich, denn so werden auch die richtigen Elemente herausgelesen, wenn oberhalb neue Elemente hinzukommen, ohne dass sich dann alles verschiebt.

...so, bin auf dem Sprung in die Ferien.

Viel Erfolg bei deinem Vorhaben.
__________________
Remo

****************
strengen denkt an!
****************
Remo ist offline   Mit Zitat antworten
Alt 15-09-2006, 16:40   #8 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
okay, das hilft, danke,

viel spass im urlaub!,

gruß
tom
modul47 ist offline   Mit Zitat antworten
Alt 16-09-2006, 18:31   #9 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
hello, nochmal...

nachdem ich mir jetzt mit der funktion von Remo einen abgebrochen habe und auch mit dem prototypen von salazar nicht weit gekommen bin, habe ich mir selbst was überlegt, was genau meinen zweck erfüllen könnte...

nur bekomm ichs irgendwie vom ablauf her nicht so richtig hin..

ich lese nun das xml in das array ein, möchte aber nur die, die unter dem ersten unterknoten des knotens "CH" stehen haben in ein neues array schreiben und zwar dann den kompletten knoten, also CH,a,b,c,d.... (alle 11 einträge). dann könnte ich das array "CH" super weiterverarbeiten...
ich hab zwar die abfrage hinbekommen, denk ich jedenfalls, aber mehr auch nicht...

mein ansatz:

Code:
createArr();

function createArr(){
    Arr_CH = new Array();
    for (var de=0; de<haendler_xml.firstChild.childNodes.length; de++) {       
       faktor = haendler_xml.firstChild.childNodes[de].childNodes[0].childNodes       
       if (faktor = "CH") {           
        Arr_CH[de] = new Array();    
        for (var cx=0; cx<haendler_xml.firstChild.childNodes[0].childNodes.length; cx++) {		       
            Arr_CH[de][cx] = haendler_xml.firstChild.childNodes[de].childNodes[cx].childNodes;	  
         } 
        }
    }
}
vielleicht denk ich ums eck, oder bin einfach du blöd...

bitte helft mir,

danke,
tom
modul47 ist offline   Mit Zitat antworten
Alt 16-09-2006, 20:16   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
Code:
test = '<items>';
test += '<item><land>CH</land><name>aaa</name><strasse>aaa</strasse></item>';
test += '<item><land>DE</land><name>bbb</name><strasse>bbb</strasse></item>';
test += '<item><land>CH</land><name>ccc</name><strasse>ccc</strasse></item>';
test += '</items>';
haendler_xml = new XML(test);
haendler_xml.ignoreWhite = true;
//
function fXML_parsen(_xml, _ary) {
  do {
    switch (_xml.nodeName) {
    case "items" : fXML_parsen(_xml.firstChild, null); break;
    case "item" :
      var temp = fXML_parsen(_xml.firstChild, {});
      if (temp.land == filter) Arr.push(temp);
      break;
    default : _ary[_xml.nodeName] = _xml.firstChild.nodeValue; break;
    }
  } while (_xml=_xml.nextSibling);
  return _ary;
}
function fXML_print(_ary) {
  for (var i = 0; i<_ary.length; i++) {
    trace(_ary[i].land+" // "+_ary[i].name+" // "+_ary[i].strasse);
  }
}
//
Arr = [];
filter = 'CH';
fXML_parsen(haendler_xml.firstChild, null);
fXML_print(Arr);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-09-2006 um 20:19 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 18-09-2006, 08:47   #11 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
super! danke für diese antwort. jetzt hab ichs hinbekommen. das ding läuft jetz prima und macht was es soll...

danke für die hilfe...

noch ne frage am rand, wo ich im forum und in der hilfe nix gefunden habe:
kann man denn in flash überhaupt arrays mit variable-erstellen also z.b. in ner schleife, oder dynamisch per funkion mit ner id oder so?
also beispielsweise in der art:
Code:
array_land_[id]_A = new Array();
da bekomm ich noch keine fehlermeldung.

wenn ich dann aber das ganze mit dem index versehen will z.b. so:
Code:
for....
array_land_[id]_A[i] = xml.firstChild.....
dann krachtws in der ausgabe: Syntaxerror etc....

wie gesagt, hab da nichts gefunden und is auch eher was aus interesse, was hier jezt nicht so wichtig ist...

auf jedenfall danke allen bis dahin,
grüße
tom
modul47 ist offline   Mit Zitat antworten
Alt 18-09-2006, 14:32   #12 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
"..kann man denn in flash überhaupt.."
geht alles. und wenn error, dann gibts auch eine erklärung dafür.
musst nur das konkrete beispiel hier posten.

das hier ist zu allgemein gehalten
array_land_[id]_A = new Array();

und auch falsch. wenn dann so (natürlich ohne --><-- nur der punkt fehlt):
array_land_[id]-->.<--_A = new Array();
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-09-2006, 14:36   #13 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
hm... das war ja mein konkretes beispiel

ich wollte, das dann arrays rauskommen wie

array_land_1_A
array_land_2_A
array_land_3_A
...

das mit dem punkt kapier ich nich... is für mich ein trenner zwischen 2 elemtene eines pfades z.b.

thx,
tom
modul47 ist offline   Mit Zitat antworten
Alt 18-09-2006, 14:51   #14 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
a so, also echt kronkret, das konkrete teil, must du krass voll tschecken ei ;-)

suchst du sowas?

var i=1;
_root['array_land_'+i+'_A']=12;
trace(array_land_1_A);
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-09-2006, 14:59   #15 (permalink)
// Knäckebrot
 
Benutzerbild von modul47
 
Registriert seit: Mar 2002
Ort: München
Beiträge: 283
jep, das muss es sein...

ich hab alles ausprobiert, ohne und mit ", mit und ohne +, aber ein ' hab ich nicht als trenner versucht...

super, danke,
tom
modul47 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele