Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-12-2004, 12:15   #1 (permalink)
Flasher
 
Benutzerbild von Scanis
 
Registriert seit: Oct 2002
Ort: Berlin
Beiträge: 601
Arrays gleichzeitig durchsuchen?

Hio Leute,

ich grübel jetzt schon ne halbe ewigkeit über diesem problem hier. Und zwar hab ich mehrere arrays erstellt und möchte die nun nach bestimmten wörtern durchsuchen.

Hab nix wirklich passendes in der suche gefunden.

Also ich hab ein eingabe-textfeld.
Der Eingabesatz wird gleich am anfang in die einzelnen wörter zerlegt:

ActionScript:
  1. //Eingabesatz Zerlegen
  2. verstehen = verstehen.split("?").join(" ?");
  3. verstehen = verstehen.split("!").join(" !");
  4. verstehen = verstehen.split(",").join(" ");
  5. eingabezerlegung = verstehen.split(" ");

Dann habe ich seeeeeeehr sehr sehr viele verschiedene arrays (etwa 100) Die so aussehen wie die hier drunter.

ActionScript:
  1. //EDELSTEINE
  2. edelsteine = new Array();
  3. edelsteine = ["diamant","saphir","opal"];
  4. //PFLANZEN
  5. pflanzen = new Array();
  6. pflanzen = ["baum","busch","blume"];
  7. //metall
  8. metalle = new Array();
  9. metalle = ["eisen","kupfer","titan","stahl","zink"];

Und die möchte ich nun ALLE durchsuchen ob und welche der eingetippten wörter in den array listen zu finden sind.
ActionScript:
  1. //Wortsuche allgemein
  2. for (var xxx = 0; xxx<90; xxx++) {
  3.     for (bbb in (pflanzen) && (metalle) && (edelsteine)) {
  4.         if (eingabezerlegung[xxx] == metalle[bbb] or pflanzen[bbb] or edelsteine[bbb]) {
  5.             trace(eingabezerlegung[xxx]+" position "+bbb);
  6.            
  7.         }
  8.     }
  9. }

So wie ich das hier gemacht hab funktioniert das kein stück. Da der array "metalle" als erster verglichen wird spuckt der script auch nur die werte von dem array aus, begrenzt die anzahl der auslesbaren auf 3. also nach stelle 2 (metalle[0], metalle[1], metalle[2], X)

kann mir da einer helfen? bitte? :-)
Scanis ist offline   Mit Zitat antworten
Alt 13-12-2004, 12:28   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Du musst einfach ein Array nach dem anderen durchsuchen.
mfg .r
bokel ist offline   Mit Zitat antworten
Alt 13-12-2004, 12:39   #3 (permalink)
Flasher
 
Benutzerbild von Scanis
 
Registriert seit: Oct 2002
Ort: Berlin
Beiträge: 601
ok thx, aber wie genau meinst du das?

so? :

ActionScript:
  1. for (var xxx = 0; xxx<90; xxx++) {
  2.     for (bbb in (pflanzen) && (metalle) && (edelsteine)) {
  3.         if (eingabezerlegung[xxx] == metalle[bbb]) {
  4.             trace(eingabezerlegung[xxx]+" position "+bbb);
  5.  
  6.         }
  7. if (eingabezerlegung[xxx] == pflanzen[bbb]) {
  8.             trace(eingabezerlegung[xxx]+" position "+bbb);
  9.  
  10.         }
  11. if (eingabezerlegung[xxx] == edelsteine[bbb]) {
  12.             trace(eingabezerlegung[xxx]+" position  "+bbb);
  13.  
  14.         }
  15.  
  16.     }
  17. }


PS: habs grad ausprobiert, funktioniert schon...aber der macht die länge aller array auf die länge des kürzesten wie mir scheint. auf jeden fall kann ich bei "metalle" nicht "stahl" und "zink" ausgeben lassen. .... Und für jedes array eine if-abfrage zu machen...ach du sch**** wird das dann lang... :-(

Geändert von Scanis (13-12-2004 um 12:42 Uhr)
Scanis ist offline   Mit Zitat antworten
Alt 13-12-2004, 12:45   #4 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
Das hier habe ich vor einiger Zeit (ich glaube mit Inspiration aus dem Forum) mal gebastelt:
ActionScript:
  1. Array.prototype.getIndex = function(e) {
  2.     p = new Array();
  3.     for (var i in this) {      
  4.         if (this[i] === e) {
  5.             p.push(i);
  6.         }
  7.     }   
  8.     if (p.length == 0) {
  9.         return -1;
  10.     } else {
  11.         return p.reverse();
  12.     }
  13. };
  14. deinArray = ["b0", "b1", "b2", "b0", "b4", "b5", "b6", "b7", "b0", "b9"];
  15. // damit der restliche Film auf das Script wartet:
  16. var pos = undefined;
  17. while (pos == undefined) {
  18.     pos = deinArray.getIndex("b0");
  19. }
  20. trace("Enthalten an Position (nicht enthalten bei -1): "+pos);

das kann Dir evtl. wenn Du es modifizierst helfen.
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 13-12-2004, 13:55   #5 (permalink)
Flasher
 
Benutzerbild von Scanis
 
Registriert seit: Oct 2002
Ort: Berlin
Beiträge: 601
danke, aber ich werd daraus irgendwie nicht schlau.....

(Anmerkung: ich bräuchte nur eine möglichkeit das der var "bbb" nicht bei der länge des kürzesten arrays aufhört. also in diesem fall bei 3.([0][1][2]) der sollte sich lieber an dem längsten array ausrichten...was kann ich da machen?-im bezug auf die if-abfrageliste weiter oben)

also das ist je gut und schön, aber irgendwie funktioniert das nicht richtig.
zunächst muss ich das doch für jeden einzelnen array dann ab der "var pos = undefined;" neu seinfügen. (was bei der menge an arrays die ich hab echt nicht so toll ist)Und ich kann nicht 2 wörter gleichzeitig abfragen.

also wenn in der eigabe dann busch UND baum zu finden ist (siehe oben) dann spuckt der nur das erste wort aus.
Und wenn ich eisen UND busch oder so eingebe, also aus 2 verschiedenen arrays etwas drin ist, dann ließt er auch nur einen von den arrays aus.

ich könnt heulen...

ActionScript:
  1. Array.prototype.getIndex = function(e) {
  2.     p = new Array();
  3.     for (var i in this) {         
  4.         if (this[i] == e) {
  5.             p.push(i);
  6.         }
  7.     }     
  8.     if (p.length == 0) {
  9.         return -1;
  10.     } else {
  11.         return p.reverse();
  12.     }
  13. };
  14. // damit der restliche Film auf das Script wartet:
  15. var pos = undefined;
  16. for (var xxx = 0; xxx<90; xxx++) {
  17. while (pos == undefined) {
  18.     pos = metalle.getIndex(eingabezerlegung[xxx]);
  19.     trace("Enthalten an Position (nicht enthalten bei -1): "+pos);
  20. }
  21. }
  22. var pos = undefined;
  23. for (var xxx = 0; xxx<90; xxx++) {
  24. while (pos == undefined) {
  25.     pos = pflanzen.getIndex(eingabezerlegung[xxx]);
  26.     trace("Enthalten an Position (nicht enthalten bei -1): "+pos);
  27.  
  28. }
  29.  
  30. }

Geändert von Scanis (13-12-2004 um 14:03 Uhr)
Scanis ist offline   Mit Zitat antworten
Alt 13-12-2004, 14:14   #6 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
bau mal eine demo fla zusammen und schieb die hoch...
__________________
Alles ist wie immer. Nur schlimmer.
querkopf ist offline   Mit Zitat antworten
Alt 13-12-2004, 14:22   #7 (permalink)
Flasher
 
Benutzerbild von Scanis
 
Registriert seit: Oct 2002
Ort: Berlin
Beiträge: 601
THX

hier bitte. hab fast alles rausgenommen bis auf das wesentliche

also er erkennt "stahl" und "zink" nicht weil das die sind die länger sind als die anderen arrays...wenn ich sie alle gleich lang mache dann geht es ohne probs, aber das kann nicht die lösung sein
Angehängte Dateien
Dateityp: zip smalltestversion.zip (7,1 KB, 5x aufgerufen)
Scanis ist offline   Mit Zitat antworten
Alt 13-12-2004, 14:40   #8 (permalink)
will code HTML for food
 
Benutzerbild von querkopf
 
Registriert seit: Mar 2003
Beiträge: 1.232
so. schau Dir das mal an.
Änderungen darin solltest Du jetzt aber auch selber vornehmen können:
ActionScript:
  1. //----------------WÖRTERBUCH---------------
  2. //EDELSTEINE
  3. edelsteine = new Array();
  4. edelsteine = ["diamant", "saphir", "opal"];
  5. //PFLANZEN
  6. pflanzen = new Array();
  7. pflanzen = ["baum", "busch", "blume"];
  8. //metall
  9. metalle = new Array();
  10. metalle = ["eisen", "kupfer", "titan", "stahl", "zink"];
  11. // array array
  12. arrays = ["edelsteine", "pflanzen", "metalle"];
  13. Array.prototype.getIndex = function(e) {
  14.     p = new Array();
  15.     for (var i in this) {
  16.         if (this[i] === e) {
  17.             p.push(i);
  18.         }
  19.     }
  20.     if (p.length == 0) {
  21.         return -1;
  22.     } else {
  23.         return p.reverse();
  24.     }
  25. };
  26. //Wortsuche allgemein
  27. for (var i = 0; i<arrays.length; i++) {
  28.     for (var j = 0; j<eingabezerlegung.length; j++) {
  29.         var pos = undefined;
  30.         while (pos == undefined) {
  31.             pos = eval(arrays[i]).getIndex(eingabezerlegung[j].toLowerCase());
  32.         }      
  33.         trace("Das Wort:\""+eingabezerlegung[j]+"\" ist in dem Array:\""+arrays[i]+"\" an Position "+pos+" enthalten. (bei -1 nicht enthalten)");      
  34.     }
  35. }
  36. //Ausgabe
  37.  

ist klar wo Du's einfügen musst...?
__________________
Alles ist wie immer. Nur schlimmer.

Geändert von querkopf (13-12-2004 um 14:42 Uhr)
querkopf ist offline   Mit Zitat antworten
Alt 13-12-2004, 14:49   #9 (permalink)
Flasher
 
Benutzerbild von Scanis
 
Registriert seit: Oct 2002
Ort: Berlin
Beiträge: 601
GENIAL!!!!!!


Danke !!!!!!!!!
Scanis ist offline   Mit Zitat antworten
Alt 11-05-2005, 10:20   #10 (permalink)
ziemlich neuer User
 
Registriert seit: Aug 2003
Ort: Solothurn (CH)
Beiträge: 155
hallo.

habe ein ähnliches problem, aber bei mir funktioniert nichtmal der "trace".

ist das eine allgemeine lösung?

danke für die hilfe

grüsse
__________________
unlocked GmbH - Internet in movement
Professionelles Webdesign
kingmauri 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:05 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele