Avatar billede enobe Nybegynder
07. januar 2002 - 16:59 Der er 12 kommentarer og
1 løsning

[actionscript] behandling af eksterne data i et array

Okay, nu giver jeg op. Jeg er ikke den store javascript-haj, så her er mit problem:
Jeg henter data fra en extern fil (data.txt) vha. \"loadVariables (\"data.txt\", \"mcdata\");\" og det går også fint.

I data.txt har jeg (blandt abdet) følgende indhold:
w1p1=1&w1p2=2&w2p1=2&w2p2=3&w3p1=3&w3p2=1&w4p1=1&w4p2=4&w5p1=2&w5p2=4&w6p1=3&w6p2=4

Det vil jeg nu gerne behandle, så det i mit script organiseres på følgende måde:


w[1].p1 = 1;
w[1].p2 = 2;
w[2].p1 = 2;
w[2].p2 = 3;
w[3].p1 = 3;
w[3].p2 = 1;
w[4].p1 = 1;
w[4].p2 = 4;
w[5].p1 = 2;
w[5].p2 = 4;
w[6].p1 = 3;
w[6].p2 = 4;

Det skal helst være som en for-løkke, da .txt kan indeholde færre eller flere wxxxx=x. Jeg er ikke engang i nærheden af en løsning...
Avatar billede lingoman Nybegynder
07. januar 2002 - 17:21 #1
Hvorfor ikke oprette et array med det samme ?

//data.txt fil

myString=1,2;2,3;3,1;1,4;2,4;3,4

//action
w = myString.split(\";\");

// resultat w[0]=\"1,2\";
// resultat w[1]=\"2,3\";
// resultat w[2]=\"3,1\";
// resultat w[3]=\"1,4\";
// resultat w[4]=\"2,4\";
// resultat w[5]=\"3,4\";

tempArray= w[0].split(\",\");

//giver tempArray[0]=1;
//giver tempArray[1]=2;

osv

derfor
w[0].p1 = tempArray[0];
w[0].p2 = tempArray[1];


vi kan også skrive det i form af en løkke

w = myString.split(\";\");

for ( i = 0; i < w.length; i++) {
    tempArray=w[i].split(\",\");
    w[i].p1=tempArray[0];
    w[i].p2=tempArray[1];
}


Bemærk at index starter fra 0, og ikke 1 som i dit eksempel

mvh geo

Avatar billede lingoman Nybegynder
07. januar 2002 - 17:26 #2
retultatet bliver derfor

w[0].p1 = 1;
w[0].p2 = 2;
w[1].p1 = 2;
w[1].p2 = 3;
w[2].p1 = 3;
w[2].p2 = 1;
w[3].p1 = 1;
w[3].p2 = 4;
w[4].p1 = 2;
w[4].p2 = 4;
w[5].p1 = 3;
w[5].p2 = 4;

Hvis du absolut har brug for at man får

                      w[1].p1 = 1;
                      w[1].p2 = 2;
                      w[2].p1 = 2;
                      w[2].p2 = 3;
                      w[3].p1 = 3;
                      w[3].p2 = 1;
                      w[4].p1 = 1;
                      w[4].p2 = 4;
                      w[5].p1 = 2;
                      w[5].p2 = 4;
                      w[6].p1 = 3;
                      w[6].p2 = 4;

kan du bare starte med

//data.txt fil

                      myString=0,0;1,2;2,3;3,1;1,4;2,4;3,4

i stedet for
Avatar billede enobe Nybegynder
07. januar 2002 - 20:49 #3
Jo, men kan jeg lave en .txt-fil som indeholder en streng som du foreslår (myString=1,2;2,3;3,1;1,4;2,4;3,4). Jeg havde forstået, at den skulle være separeret af \"&\"

Avatar billede lingoman Nybegynder
07. januar 2002 - 21:00 #4
man bruger & til at adskille en variabels værdi fra det næste variabel navn, ligesom du gør. Der er dog ingen grund til at sende ( via server script) eller loade variabel navne her da vi kun behøver at parse en streng med værdier. Her har jeg brugt \";\" til at adskille w[0],w[1],w[2],... og \",\" til at adskille *.p1 og *.p2
resten kan Flash selv behandle og oprette variablerne som vist for oven
mvh geo
Avatar billede lingoman Nybegynder
07. januar 2002 - 21:06 #5
Ja, man kan sagtens loade en streng som vist her. Tjek det :)

//frame x action

loadVariables (\"data.txt\", \"mcdata\");

//frame x+1 action

w = myString.split(\";\");

                        for ( i = 0; i < w.length; i++) {
                            tempArray=w[i].split(\",\");
                            w[i].p1=tempArray[0];
                            w[i].p2=tempArray[1];
                        }

trace(\"w[0].p1=\" + w[0].p1);
trace(\"w[0].p2=\" + w[0].p2);
trace(\"w[1].p1=\" + w[1].p1);
etc..
Avatar billede lingoman Nybegynder
07. januar 2002 - 21:38 #6
Fik du afprøvet det ?
Avatar billede enobe Nybegynder
07. januar 2002 - 22:29 #7
Ikke endnu. Jeg har ligge eet spørgsmål mere, inden jeg går i krig:

Min .txt ser nu sådan ud:
wire=0,0;1,2;2,3;3,1;1,4;2,4;3,4
Kan jeg sætte flere nye variabel i samme .txt, adskilt af linieskift:
maxwire=6;
max=8;
osv...
Jeg tror hovedproblemet er, at jeg ikke har styr på, hvordan LoadVariables parser min .txt - Det må jeg have til gode på et andet tidspunkt. Jeg synes nu heller ikke, at det er specielt godt dokumenteret.

Så det...



Avatar billede lingoman Nybegynder
07. januar 2002 - 23:43 #8
Du skal skrive dine variabler sådan her ( bemærk brugen af \"&\" her )

//data.txt fil

maxwire=6&max=8&wire=0,0;1,2;2,3;3,1;1,4;2,4;3,4&ready=ok

//actioner
//indlæs variablerne til \"mcdata\" tidslinien
loadVariables (\"data.txt\", \"mcdata\");

//For at være sikker på at alle variabler er indlæst før vi prøver at manipulere dem skal du enten vente indtil

(ready==ok) giver true

eller udføre følgende action i en senere frame

if (ready==ok) {
              w = wire.split(\";\");
              for ( i = 0; i < w.length; i++) {
                      tempArray=w[i].split(\",\");
                      w[i].p1=tempArray[0];
                      w[i].p2=tempArray[1];
              }
} else {
              gotoAndPlay(_currentframe - 1);  //looper indtil den sidste variabel er indlæst
}


Husk at alle dine variabler nu kun hører til mcdata. Derfor skal du bruge hele stien dertil hvis du skal have adgang til dem fra en anden tidslinie, fks. _root

fra mcdata kan vi bruge
trace(\"maxwire \" + maxwire);  // giver 6


fra _root bruger vi hele stien dertil fks

trace(maxwire from maintimeline \" + _root.mcdata.maxwire);

mvh geo
Avatar billede lingoman Nybegynder
07. januar 2002 - 23:52 #9
hvis du udføre loadVariables kommandoen fra \"mcdata\" kan du nøjes med syntaksen

//frame action i frame x
loadVariables (\"data.txt\", \"\"); // Flash antager at variablerne skal loades ind i denne tidslinie

//frame action i frame x+2
if (ready==ok) {
              w = wire.split(\";\");
            for ( i = 0; i < w.length; i++) {
                              tempArray=w[i].split(\",\");
                              w[i].p1=tempArray[0];
                              w[i].p2=tempArray[1];
            }
} else {
            gotoAndPlay(_currentframe - 1);  //looper indtil den sidste variabel er indlæst
}

mvh geo
Avatar billede lingoman Nybegynder
08. januar 2002 - 01:19 #10
Jeg har fundet fejl i koden for oven og skriver den rettede udgave her og har lavet og testet en fla jeg kan sende dig hvis du skriver en mail til geo@lingoman.dk
Husk ref. til http://www.eksperten.dk/spm/155502 og dit brugernavn i subject

//data.txt fil

                      maxwire=6&max=8&wire=0,0;1,2;2,3;3,1;1,4;2,4;3,4&ready=ok

//frame 1 action
loadVariables(\"data.txt\",\"\");

//frame 3 action
if (ready == \"ok\") {
    w = new Array();
    tempArray = wire.split(\";\");
    for (i=0; i<tempArray.length; i++) {
        w[i] = tempArray[i].split(\",\");
    }
} else {
    gotoAndPlay (_currentframe-1); // looper indtil den sidste variabel er indlæst
}


Vi indsætter en trace

stop();
trace(\"w[0][0]=\" + w[0][0]);
trace(\"w[0][1]=\" + w[0][1]);
trace(\"w[1][0]=\" + w[1][0]);
trace(\"w[1][1]=\" + w[1][1]);
trace(\"w[2][0]=\" + w[2][0]);
trace(\"w[2][1]=\" + w[2][1]);
trace(\"w[3][0]=\" + w[3][0]);
trace(\"w[3][1]=\" + w[3][1]);
trace(\"w[4][0]=\" + w[4][0]);
trace(\"w[4][1]=\" + w[4][1]);
trace(\"w[5][0]=\" + w[5][0]);
trace(\"w[5][1]=\" + w[5][1]);
trace(\"w[6][0]=\" + w[6][0]);
trace(\"w[6][1]=\" + w[6][1]);

//Output vinduet giver
w[0][0]=0
w[0][1]=0
w[1][0]=1
w[1][1]=2
w[2][0]=2
w[2][1]=3
w[3][0]=3
w[3][1]=1
w[4][0]=1
w[4][1]=4
w[5][0]=2
w[5][1]=4
w[6][0]=3
w[6][1]=4

mvh geo
Avatar billede lingoman Nybegynder
08. januar 2002 - 08:05 #11
mail sendt :)
Avatar billede enobe Nybegynder
08. januar 2002 - 09:20 #12
Mange tak for hjælpen. Jeg kom et langt stykke videre
Avatar billede lingoman Nybegynder
08. januar 2002 - 09:22 #13
tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester