Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-06-2005, 13:00   #1 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Array in txt schreiben und wieder auslesen

Hallo und herzlich willkommen zum rund etwa 150.000'sten Problem in desem Forum (laut Themenanzahl) . Trotz stöberns im FF habe ich die Lösung leider noch nicht hinbekommen. EIGENTLICH simpel. Ich möchte nur ein einziges Array speichern und auslesen.

einen 2-Demensionalen Array:
ActionScript:
  1. spielfeld = [[1, 0, 6, 0, 0, 4, 0, 0, 0],
  2. [0, 2, 0, 0, 0, 0, 5, 0, 0],
  3. [0, 0, 3, 0, 0, 0, 0, 0, 0],
  4. [2, 0, 0, 4, 0, 0, 0, 7, 0],
  5. [0, 0, 0, 0, 5, 0, 0, 0, 0],
  6. [0, 0, 0, 0, 0, 6, 0, 0, 0],
  7. [0, 0, 0, 0, 0, 0, 7, 0, 0],
  8. [0, 0, 0, 0, 0, 0, 0, 8, 0],
  9. [0, 0, 0, 0, 0, 0, 0, 0, 9]];

Diesen Array möchte ich gerne in eine txt Datei speichern und dann später (mit einder anderen swf) auslesen lassen. Wie muss das genau aussehen?
djdwarf ist offline   Mit Zitat antworten
Alt 29-06-2005, 13:44   #2 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Soll doch sicher auf einem Server gespeichert werden, oder?
Wenn ja dann ist PHP dein Freund.
Du kannst ja via loadVars Variablen an ein PHP-Skript übergeben. Ich würde das Array vorher mit festgelegten Trennzeichen zu einem String verbinden und diesen dann an das PHP-Skript senden (soweit ich weiss können von Flash keine Arrays übertragen werden. Arrayelemente werden dann starndardmässig mit einem ',' getrennt). Also:
ActionScript:
  1. temp = new Array();
  2. for(i = 0; i < array.length; i++) {
  3.  temp[i] = array[i].join(',');
  4. }
  5. result = temp.join('#');
Jetzt hast du einen String bei dem deine erste Dimension durch '#' und die zweite durch ',' getrennt ist.
PHP stellt genug funktionen zur verfügung um diesen String in eine Datei zu schreiben und auch von dort wieder auszulesen.
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 29-06-2005, 15:02   #3 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Ah, sehr gut. Das bringt mich doch schon mal in die richtige Richtung. Danke! Mit PHP komm ich bis jetzt leider nur wenig klar, aber ich werde mal schauen, inwiefern ich das hinbekomme.
Zum Verständniss: Ich mach aus dem Array einen String, den schick ich dann an ein PHP, das mir eine txt schreibt, richtig? Später lasse ich dann von der anderen swf aus über das PHP diese txt wieder einlesen. Dann muss ich ja den String wieder zurück umwandeln in ein Array, wie funktioniert das?

Und eine Frage noch, welchen Zweck genau erfüllt in deinem Beispiel die For-Schleife?

Hab mal getestet:

ausgegebener String mit For-Schleife:
1,0,6,0,0,4,0,0,0#0,2,0,0,0,0,5,0,0#0,0,3,0,0,0,0, 0,0#2,0,0,4,0,0,0,7,0#0,0,0,0,5,0,0,0,0#0,0,0,0,0, 6,0,0,0#0,0,0,0,0,0,7,0,0#0,0,0,0,0,0,0,8,0#0,0,0, 0,0,0,0,0,9

ausgegebener String ohne For-Schleife:
1,0,6,0,0,4,0,0,0#0,2,0,0,0,0,5,0,0#0,0,3,0,0,0,0, 0,0#2,0,0,4,0,0,0,7,0#0,0,0,0,5,0,0,0,0#0,0,0,0,0, 6,0,0,0#0,0,0,0,0,0,7,0,0#0,0,0,0,0,0,0,8,0#0,0,0, 0,0,0,0,0,9

Sehe da keinen Unterschied ... ?

Danke für deine Hilfe!

Gruss,
Dwarf
djdwarf ist offline   Mit Zitat antworten
Alt 29-06-2005, 15:22   #4 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Tag!
Den Sting kannst du so zurückwandeln. Keine Ahnung, ob's auch einfacher geht...
ActionScript:
  1. var spielfeld = [[1, 0, 6, 0, 0, 4, 0, 0, 0], [0, 2, 0, 0, 0, 0, 5, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0], [2, 0, 0, 4, 0, 0, 0, 7, 0], [0, 0, 0, 0, 5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 6, 0, 0, 0], [0, 0, 0, 0, 0, 0, 7, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9]];
  2. spielfeld = spielfeld.toString().split(",").join("");
  3. trace(spielfeld);
  4. var arr = [];
  5. var y = -1;
  6. for (var i = 0; i<9; i++) {
  7.     arr[i] = [];
  8.     for (var x = 0; x<9; x++) {
  9.         y++;
  10.         arr[i][x] = Number(spielfeld.charAt(y));
  11.     }
  12. }
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-06-2005, 15:42   #5 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Um den String in eine Datei zu schreiben, kannst du folgendes machen:
PHP-Code:
$fhandle fopen('dateiname.txt''w');
fputs($fhandle$arraystring);
fclose($fhandle);
//es sollte auch mit file_put_contents(dateiname, string); funktionieren 
Das auslesen des Strings und Umwandlen in ein Array muss nicht über PHP laufen. Du kannst die Textdatei einfach in Flash einlesen und dann einen String wieder in ein Array zerlegen:
ActionScript:
  1. //dein arraystring aus der Textdatei sieht ja wie folgt aus
  2. //arraystring = 1,2,3,4,5,6#0,1,2,3,4,5,6,7,8,9#1,3,4...
  3. zahlenarray = new Array();
  4. parts = arraystring.split('#');
  5. for(i = 0; i < parts.length; i++) {
  6.  zahlenarray[i] = new Array();
  7.  zahlenarray[i] = parts[i].split(',')
  8. }

Und noch zu deiner Frage mit der for-Schleife:

Dein Array ist ja 2-Dimensional und hat also die Form:
Code:
my_array => 0 => 0 = 1
                 1 = 2
                 2 = 3
            1 => 0 = 4
                 1 = 5
                 ...
Die for-Schleife macht nix anderes als alle n-Elemente des Arrays der Tiefe 1 zu einem String zu verbinden (mit Trennzeichen ',') um dann im nachfolgenden Schritt alle Elemente der Tiefe 0 zu verbinden (mit Trennzeichen '#'). Flash verbindet automatisch Unterelemente mit einem ','. Will man ein anderes Trennzeichen als das ',' verwenden, muss es so gemacht werden wie ich es aufgeschrieben habe.
Du kannst den Sachverhalt ja mal testen, indem du statt des ',' ein '+' als Trennzeichen verwendest. Dann lass die ausgeben was mit und ohne for-Schleife erzeugt wird. Sei gespannt....
__________________
ein mensch ohne macke ist kacke...

Geändert von DaKinel (29-06-2005 um 15:44 Uhr)
DaKinel ist offline   Mit Zitat antworten
Alt 29-06-2005, 16:16   #6 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Danke Frager! Aber leider geht auf deine Weise die zweite Dimension des Arrays verloren.

Danke für die ausführliche Erklärung DaKinel! Denke ich hab soweit alles verstanden und funktioniert auch alles soweit. Muss nur nochma nachgucken wie ich die txt einlesen lasse, aber das sollte kein grösseres problem darstellen denke ich

Besten Dank! *verbeug*
djdwarf ist offline   Mit Zitat antworten
Alt 29-06-2005, 16:25   #7 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Zitat:
Zitat von djdwarf
Danke Frager! Aber leider geht auf deine Weise die zweite Dimension des Arrays verloren.
Äh, nö...
ActionScript:
  1. var spielfeld = [[1, 0, 6, 0, 0, 4, 0, 0, 0], [0, 2, 0, 0, 0, 0, 5, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0], [2, 0, 0, 4, 0, 0, 0, 7, 0], [0, 0, 0, 0, 5, 0, 0, 0, 0], [0, 0, 0, 0, 0, 6, 0, 0, 0], [0, 0, 0, 0, 0, 0, 7, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9]];
  2. spielfeld = spielfeld.toString().split(",").join("");
  3. trace(spielfeld);
  4. var arr = [];
  5. var y = -1;
  6. for (var i = 0; i<9; i++) {
  7.         arr[i] = [];
  8.         for (var x = 0; x<9; x++) {
  9.                 y++;
  10.                 arr[i][x] = Number(spielfeld.charAt(y));
  11.         }
  12. }
  13. trace(arr[0][2])//geht doch?
  14. trace(arr[1][6])//geht doch auch!!!
  15.  
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-06-2005, 16:47   #8 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Huch ... nanu? Da muss ich wad falsch gemacht haben ... hmm ... *anguck* kein Plan, da hab ich irgendwie Müll gemacht, mein Fehler, sorry

grrrr ..... ich bekomme das doch tatsache mit diesem Loadvars Object nicht hin! Das kann doch nicht so schwer sein ... ?! ich brauch ja nur den kompletten Inhalt der TXT in eine Variable laden .... aber ich bekomms einfach nicht hin! Auch nicht mit LoadVariables .... ich sitz heute schon zu lange an dem Projekt glaub ich .... -.- Hat jemand den Code grad auf Tasch ... ?

Also, hab folgendes Script

ActionScript:
  1. lv = new LoadVars();
  2. lv.onLoad = function(geladen) {
  3.     if (geladen) {
  4.         trace(lv)
  5.     } else {
  6.         trace("Error");
  7.     }
  8. };
  9. lv.load("spielfeld.txt");
Das schmeisst mir aber sowas hier aus:
1%2C0%2C6%2C0%2C0%2C4%2C0%2C0%2C0%230%2C2%2C0%2C0% 2C0%2C0%2C5%2C0%2C0%230%2C0%2C3%2C0%2C0%2C0%2C0%2C 0%2C0%232%2C0%2C0%2C4%2C0%2C0%2C0%2C7%2C0%230%2C0% 2C0%2C0%2C5%2C0%2C0%2C0%2C0%230%2C0%2C0%2C0%2C0%2C 6%2C0%2C0%2C0%230%2C0%2C0%2C0%2C0%2C0%2C7%2C0%2C0% 230%2C0%2C0%2C0%2C0%2C0%2C0%2C8%2C0%230%2C0%2C0%2C 0%2C0%2C0%2C0%2C0%2C9=&onLoad=%5Btype%20Function%5 D

Geändert von djdwarf (29-06-2005 um 16:56 Uhr)
djdwarf ist offline   Mit Zitat antworten
Alt 29-06-2005, 17:05   #9 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hi!
Um mal bei meinem Script zu bleiben...
ActionScript:
  1. function arrayBauen(datei) {
  2.     arr = [];
  3.     var y = -1;
  4.     for (var i = 0; i<9; i++) {
  5.         arr[i] = [];
  6.         for (var x = 0; x<9; x++) {
  7.             y++;
  8.             arr[i][x] = Number(datei.charAt(y));
  9.         }
  10.     }
  11. }
  12. lv = new LoadVars();
  13. lv.onLoad = function(oki) {
  14.     if (oki) {
  15.         trace("alles klar");
  16.         trace(this.deineVar);
  17.         arrayBauen(this.deineVar);
  18.         trace(arr);
  19.     } else {
  20.         trace("Shit!");
  21.     }
  22. };
  23. lv.load("vari.txt", lv);
Die "vari.txt" sieht dann so aus:
Code:
&deineVar=106004000020000500003000000200400070000050000000006000000000700000000080000000009&
edit: Ohne die Leerzeichen natürlich...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-06-2005, 17:19   #10 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
ich werf mal das stichwort XML ins spiel (sowas sieht doch irgendwie aufgeräumter aus):

<spielfeld>
<line nr='106004000' />
<line nr='020000500' />
<line nr='003000000' />
<line nr='200400070' />
<line nr='000050000' />
<line nr='000006000' />
<line nr='000000700' />
<line nr='000000080' />
<line nr='000000009' />
</spielfeld>

den rest macht Der Frager ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (29-06-2005 um 17:20 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 29-06-2005, 17:27   #11 (permalink)
Neuer User
 
Registriert seit: Jul 2003
Ort: Berlin
Beiträge: 283
Thumbs up

XML is much better...
__________________
ein mensch ohne macke ist kacke...
DaKinel ist offline   Mit Zitat antworten
Alt 29-06-2005, 17:32   #12 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
@hgseib: Mit XML hast du natürlich recht! Hatte hier nur noch Keiner erwähnt und ich habe ehrlich gesagt nicht dran gedacht. Auf der anderen Seite (wenn nur Flash die Dateien schreibt und liest) ist's ja "relativ" egal, ob die auf den ersten Blick aufgeräumt sind oder nicht...
__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 29-06-2005, 17:36   #13 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Neee, is schon ganz ok so! Ich kämpf mich die letzen Tage echt extrem mit AS ab und lern im moment jeden Tag neue Befehle .. vor einer Woche kannte ich keine Arrays, wusste nicht wie man mit functionen arbeitet und konnte auch keine For-Schleife. Und nun hab ich n komplettes Sudoku Spiel gebaut, das sogar funktioniert .... wie gesagt, im moment lern ich mehr als genug, jetzt bitte nich auch noch mit XML anfangen, ich bekomm langsam Kopfschmerzen ^^ ... alles zu seiner Zeit.

Hatte eben gut zu kämpfen mit dem kompletten Script von dir, Frager, aber habe es jetzt soweit das alles das tut, was ich will (wunderbar!!!) ... aber für heute langst, nu hab ich Kopfschmerzen. Morgen bau ichs ein .. ich mach jetzt Feierabend!!!

So ... und nochmal ein dickes DANKE!
djdwarf ist offline   Mit Zitat antworten
Alt 29-06-2005, 18:15   #14 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.321
dann was zum krübeln für morgen ;-)
ActionScript:
  1. spielfeld = [[1, 0, 6, 0, 0, 4, 0, 0, 0], [0, 2, 0, 0, 0, 0, 5, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0]];
  2. //
  3. function fSpielfeld2XML(sf) {
  4.     var txt = '';
  5.     for (var i = 0; i<sf.length; i++) {
  6.         txt += '<line nr="'+sf[i].join('')+'" />';
  7.     }
  8.     txt = '<spielfeld>'+txt+'</spielfeld>';
  9.     return new XML(txt);
  10. }
  11. function fXML2Spielfeld(xml) {
  12.     var sf = xml.firstChild.childNodes;
  13.     var txt = [];
  14.     for (var i = 0; i<sf.length; i++) {
  15.         txt[i] = sf[i].attributes['nr'].split('');
  16.     }
  17.     return txt;
  18. }
  19. function fXMLsendAndLoad(xml) {
  20.     xml.ignoreWhite = true;
  21.     xml.sendAndLoad('xml.php', xml);
  22.     xml.onLoad = function(vOK) {
  23.         if (!vOK) {
  24.             // nichts zurückgekommen
  25.             return null;
  26.         } else {
  27.             return this,
  28.         }
  29.     };
  30. }
  31. //
  32. gXML = fSpielfeld2XML(spielfeld);
  33. spielfeld2 = fXML2Spielfeld(gXML);
  34. trace(spielfeld2[1]);
  35. //
  36. /*
  37. <?php
  38. $back="";
  39. foreach ($_POST as $elem)
  40. {   $back.=$elem;
  41. }
  42. // damit das empfangene < ?xml version=1.0 encoding=utf-8 ? >
  43. // nicht doppelt zurueckgesendet wird.
  44. $back=substr($back,strpos($back,'<'));
  45. //
  46. // wegen den Anfuehrungszeichen der attribute
  47. echo(stripslashes($back));
  48. ?>
  49. */
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 30-06-2005, 11:25   #15 (permalink)
Hardstyle DJ
 
Benutzerbild von djdwarf
 
Registriert seit: Nov 2004
Ort: Hamburg
Beiträge: 622
Danke hgseib, aber hab mich jetzt mal für die andere Variante entschieden, weil ich das soweit verstehe und es auch funzt nu. XML scheint mächtig, aber wie gesagt, alles zu seiner Zeit, werde ich mir irgendwann mal genauer anschauen
djdwarf 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 12:12 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele