Bjr,
J'ai besoin d'aide concernant le split et le formatage de 2 messages js, le second msg incluant le premier :)
Le problème : le second message fait 1 boucle, dès lors qu'il inclut le premier message. Je n'arrive pas à trouver de solution pour stopper cette erreur. Évidemment, pour corser le tout, les strings sont de qté variable... Je ne peux donc pas utiliser de séparateurs qui comptent pour splitter.
msg 0 : IWAP02,zh_cn,0,7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7#
ici, split et formatage sont parfaits, qd le msg 0 est exécuté, seul :
460,0,9520,3671
460,0,9520,3672
460,0,9520,3673
460,0,9520,3674
460,0,9520,3675
460,0,9520,3676
460,0,9520,3677
js message 0 :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 //Prepare JS object and fill out fields before conversion to XML var LocationRQ = {"$":{"xmlns":"http://skyhookwireless.com/wps/2005","version":"2.26","street-address-lookup":"full"},"authentication":[{"$":{"version":"2.2"},"key":[{"$":{"key":"XYXYXXYXYXYXYXYXYXYXXYXYXYXYYXYXYXXY","username":"ABABABABABABABABAAB"}}]}],"gsm-tower":[]} // IWAP02,zh_cn,0,7,226,10,1440|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7# let elements = msg.elements; LocationRQ.flag = msg.flag; // true or false - A or V LocationRQ.gsmTowerStrings = msg.gsmTowerStrings // Get LBS datas let i; let gsmTowerStrings = LocationRQ.gsmTowerStrings; let j; let gsmTower = []; for (j = 6; j < msg.elements.length; j++) { let spl = msg.elements[j].split("|") gsmTower.push({ mcc: msg.mmc, mnc: msg.mnc, lac: spl[0], ci: spl[1] }) // 460,0,9520|3671| } // adjust baseCountgsmTower just in case the number actually there didn't match that expexted LocationRQ.baseCountgsmTower = gsmTower.length LocationRQ["gsm-tower"] = gsmTower; msg.payload = {LocationRQ: LocationRQ}; return msg
message 1 :
IWAP02,zh_cn,1,[B]7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,4,1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#
Ici, qd on associe les 2 commandes dans un même function node... y a systématiquement une boucle qui se crée :
460,0,9520,3671
460,0,9520,3672
460,0,9520,3673
460,0,9520,3674
460,0,9520,3675
460,0,9520,3676
460,0,9520,3677
460,0,4 <= la boucle commence ici. Normalement, je ne devrai trouver que 11 objets (7 gsmTower + 4 ap) mais j'en ai 13 au final...
460,0,1 <= end ...
js message 1 :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 //Prepare JS object and fill out fields before conversion to XML var LocationRQ = {"$":{"xmlns":"http://skyhookwireless.com/wps/2005","version":"2.26","street-address-lookup":"full"},"authentication":[{"$":{"version":"2.2"},"key":[{"$":{"key":"XYXYXXYXYXYXYXYXYXYXXYXYXYXYYXYXYXXY","username":"ABABABABABABABABAAB"}}]}],"access-point":[],"gsm-tower":[]} // flag = 1 // IWAP02,zh_cn,1,7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7, 4,1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65# let elements = msg.elements; LocationRQ.flag = msg.flag; // 0 or 1 LocationRQ.gsmTowerStrings = msg.gsmTowerStrings // Get LBS datas let i; let gsmTowerStrings = LocationRQ.gsmTowerStrings; let j; let gsmTower = []; for (j = 6; j < msg.elements.length; j++) { let spl = msg.elements[j].split("|") gsmTower.push({ mcc: msg.mmc, mnc: msg.mnc, lac: spl[0], ci: spl[1] }) // 460,0,9520|3671| } // adjust baseCountgsmTower just in case the number actually there didn't match that expexted LocationRQ.baseCountgsmTower = gsmTower.length LocationRQ["gsm-tower"] = gsmTower; // Get WIFI datas let k; let wifiAccessPointsStrings = elements[14].split("&"); let l; let ap = []; for (l = 0; l < wifiAccessPointsStrings.length; l++) { let baseElements = wifiAccessPointsStrings[l].split("|") ap.push({ mac: baseElements[1].replace(/:/g,""), ssid: baseElements[0], ["signal-strength"]: baseElements[2] }) } // adjust baseCountwifiAccessPoints just in case the number actually there didn't match that expexted LocationRQ.baseCountwifiAccessPoints = ap.length LocationRQ["access-point"] = ap; msg.payload = {LocationRQ: LocationRQ}; return msg
Merci d'avance de votre aide... et de ne ne pas me renvoyer vers les grand chapitres du codage js... c'est déjà lu, et mon salut c'est ici, tout de suite... et maintenant! :D