Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-08-2003, 13:08   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 26
Allgemeingültige Funktion für das Umwandeln von beliebigen Variablen in float

Ich lese aus einem externen Programm Werte nach Flash ein. Diese Werte werden mittels JavaScript übergeben. Dadurch bekomme ich zunächst mal einen Haufen strings.
Des weiteren lese ich Werte aus Eingabefeldern aus. Das ergibt ebenfalls strings.

Wie muss jetzt eine Funktion aussehen, die ich an beliebiger Stelle aufrufen kann, um eine Typumwandlung nach float vorzunehmen?
Mein Ansatz funktioniert leider nicht:
ActionScript:
  1. // Hier werden zunächst die Rückgabewerte in ein Array geschrieben
  2. var nachfloat = new Array(h,b,beta0)
  3.  
  4. // Umwandlung von strings aus Eingabefeldern oder Übernahmewerten in Fließkommazahlen
  5. function infloatumwandeln(nachfloat){
  6.     for(i=0; i<nachfloat.length; i++){
  7.         nachfloat[i] = parseFloat(nachfloat[i]);
  8.     }
Wenn ich Variable habe, die nach einem bestimmten Schema benannt sind, z.B. von wert1 bis wert6, dann funktiert es mit der folgenden Variante:
ActionScript:
  1. function infloatumwandeln(nachfloat){
  2.     for(i=0; i<nachfloat.length; i++){
  3.         _root["wert" + (i+1)] = parseFloat(nachfloat[i]);
  4.     }
  5. }

Ich brauche aber eine einfache Möglichkeit Variable mit beliebigem Namen umzuwandeln.

Wer hätte da eine Idee?

Astrid
auwei ist offline   Mit Zitat antworten
Alt 28-08-2003, 13:15   #2 (permalink)
[Ernst Reiter]
 
Benutzerbild von Scrawer
 
Registriert seit: Jul 2001
Ort: austria
Beiträge: 3.691
du kannst mit for in alle objekte somit auch variabeln einer ebene aufgreifen...

z.b.
for (var i in _root)
{
trace(i)
// _root[i] = ..... // so könntest sie ansprechen
}
evtl. ist noch eine if abrage mit typeof erforderlich.. damit du keine ungewünschten objekte zurückbekommst
__________________
Das Gesetz des Lebens liegt im Notwendigen. Der Reiz des Lebens liegt im Überflüssigen
m.f.g Scrawer (www.thinkspace.at)
Scrawer ist offline   Mit Zitat antworten
Alt 28-08-2003, 13:56   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 26
Auswahl eingrenzen

Hallo,

Danke für deinen Hinweis. Allerdings habe ich eine ganze Menge Variable, die ich aber nicht alle typkonvertieren möchte.

Ich denke vom Programmierstil und von der Seite der Ressourcenschonung her wäre es besser, nur die Variablen umzuwandeln, die man auch wirklich braucht. Daher auch meine Überlegung mit dem Array für die Übergabe.

Was meinst du mit
ActionScript:
  1. for (var i in _root).....

Ist das ein Ausdruck oder ein Plathalten?

Nehmen wir mal an, ich arbeite mit 30 Variablen, will aber nur 4 typkonvertieren.
Also hatte ich mir gedacht, mach in ein Array, ruf meine Standardfunktion auf und fertig ist die Laube.

Geht das?

Astrid
auwei ist offline   Mit Zitat antworten
Alt 28-08-2003, 15:08   #4 (permalink)
HAY
Neuer User
 
Benutzerbild von HAY
 
Registriert seit: Aug 2002
Ort: Faust-Stadt
Beiträge: 2.577
hi
habe lange gebraucht um zu wissen was du willst
ActionScript:
  1. a=b=c=d=f="1001"
  2. //Wandelt die Variablen in Float
  3. var nachfloat = new Array("a","b","c")
  4. function wandeln(arr){
  5.         for(var i=0; i<arr.length; i++){
  6.               _root[arr[i]]=Number(_root[arr[i]]) ;
  7.         }
  8. }
  9. wandeln(nachfloat)
__________________
gruß Harry
HAY ist offline   Mit Zitat antworten
Alt 28-08-2003, 16:27   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 26
Das kann nicht funktionieren

Hallo HAY,

dein Vorschlag kann nicht funktionieren.
ActionScript:
  1. a=b=c=d=f="1001"
  2. //Wandelt die Variablen in Float
  3. var nachfloat = new Array("a","b","c")
Hier hast du ein Array definert, welches drei strings in Form von einzelnen Buchstaben enthält, die zufälligerweise dieselben sind, wie die Variablennamen.
ActionScript:
  1. function wandeln(arr){
  2.         for(var i=0; i<arr.length; i++){
Sowei Ok, aber jetzt kommt Quark
ActionScript:
  1. _root[arr[i]]=Number(_root[arr[i]]) ;
Du hast gerade drei Buchstaben in eine Zahl umgewandelt. Da das Array drei Buchstaben und nicht drei Variable enthält steht dadrin wirklich a,b,c und nicht 1001,1001,1001

Das Prinzip ist schon OK, aber es ist dasselbe, dass ich schon ganz oben ausprobiert habe, nur dummerweise funktioniert es nicht

Wo ist mein Denkfehler?
Ich bin auf folgendes gestoßen

ActionScript:
  1. // Hier werden zunächst die Rückgabewerte in ein Array geschrieben
  2. h = "10";
  3. b = "20";
  4. beta0 ="0.01";
  5. var nachfloat = new Array(h,b,beta0)
  6.  
  7. // Umwandlung von strings aus Eingabefeldern oder Übernahmewerten in Fließkommazahlen
  8. function infloatumwandeln(nachfloat){
  9.         for(i=0; i<nachfloat.length; i++){
  10.                 nachfloat[i] = parseFloat(nachfloat[i]);
  11.         }
  12. }
  13.  
  14. infloatumwandeln(nachfloat);
  15.  
  16. test = typeof(nachfloat[1]);
  17. test1 = typeof(b);
  18. trace(test);
  19. trace(test1);
Im ersten Fall gibt typeof den Typ "number" und im zweiten Fall "string" zurück
Irgendwie muss ich da an meine uralten, völlig verrosteten C++ Kenntnisse denken. Da gab es doch was mit "call by reference" und "call by value". Gibt es das in AS auch?

Eine schwer grübelnde Astrid
auwei ist offline   Mit Zitat antworten
Alt 28-08-2003, 16:54   #6 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
primitive Datentypen by value, der Rest by Reference
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 28-08-2003, 17:26   #7 (permalink)
HAY
Neuer User
 
Benutzerbild von HAY
 
Registriert seit: Aug 2002
Ort: Faust-Stadt
Beiträge: 2.577
das kann wohl funktionieren!!
hi
na ich weiß jetzt nicht was du willst.du sagst du lädst variablen
rein.ok die sind dann als string (zb. a,b,c,d,e,f)
nun mache ich ein array mit den variablen namen die ich in float
wandeln will.zb("a","b","c").schau mal den unterschied an von meinem array und deinem.
nach dem wandel sind a,b,c float mit den werten 100.1.
und d,e,f bleiben string.im array ändert sich garnichts.
ActionScript:
  1. a=b=c=d=e=f="100.1"
  2. //Wandelt die Variablen in Float
  3. var nachfloat = new Array("a","b","c")
  4. function wandeln(arr){
  5.         for(var i=0; i<arr.length; i++){
  6.                 _root[arr[i]]=Number(_root[arr[i]]) ;
  7.         }
  8. }
  9. wandeln(nachfloat)
  10. a=a+1  // gibt  101.1
  11. d=d+1 //  gibt  "100.11"
  12.  
__________________
gruß Harry

Geändert von HAY (28-08-2003 um 17:37 Uhr)
HAY ist offline   Mit Zitat antworten
Alt 29-08-2003, 08:15   #8 (permalink)
Neuer User
 
Registriert seit: Feb 2003
Beiträge: 26
Es liegt am _root[...]

@ HAY
Vielen Dank für die Hilfe. Du hast völlig recht und ich weiß jetzt auch wo mein Fehler lag. Es liegt an zwei Dingen.
Zum einen muss das erzeugt Array die Namen der Variablen als string enthalten, also
ActionScript:
  1. //So ist es korrekt
  2. var nachfloat = new Array("b","h","beta0");
und nicht die Variablen selbst
ActionScript:
  1. //So ist es falsch
  2. var nachfloat = new Array(b,h,beta0);
, zum anderen muss bei der eigentlichen Umwandlung _root beim Aufruf der Stelle im Array enthalten sein
ActionScript:
  1. //richtig
  2. _root[arr[i]]=Number(_root[arr[i]]);
Das _root bewirkt im Gegensatz zu Zeile
ActionScript:
  1. //falsch
  2. arr[i]=Number(arr[i]);
, dass durch den Ausdruck
ActionScript:
  1. _root[arr[i]]
beim Auswerten von innen nach außen zunächst festgestellt wird, dass z.B. in arr[2] der string beta0 steht. Jetzt geht es aber weiter nach außen und durch das _root sucht der Interpreter nach einem Element namens "beta0", dass sich in _root befindet und dass ist genau die Variable, die ich gerne Typkonvertieren möchte.

Ob man nur parseFloat oder Number benutzt hat keine Auswirkung auf das Ergebnis.

Habe ich das so korrekt dargestellt? Es hat eine Weile gedauert bis der Groschen gefallen ist. Ich habe das hier so ausführlich dargestellt, damit andere mit dem gleichen Problem hier die Lösung finden könnten.
Die Sache mit dem _root ist nur schwer zu finden, wenn man nicht weiß, wo man nachschauen soll.

Vielen Dank

Astrid
auwei ist offline   Mit Zitat antworten
Alt 29-08-2003, 08:17   #9 (permalink)
HAY
Neuer User
 
Benutzerbild von HAY
 
Registriert seit: Aug 2002
Ort: Faust-Stadt
Beiträge: 2.577
hi bingo
__________________
gruß Harry
HAY 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 07:38 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele