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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!