cerede2000,
C'est sur et certain ce que tu me dis la ;)
Mais ma figure de style doit se faire en Javascript lol.
Version imprimable
cerede2000,
C'est sur et certain ce que tu me dis la ;)
Mais ma figure de style doit se faire en Javascript lol.
Hum a la limite ce que tu pourrais faire meme si ca va etre super long a mettre en place c'est deja separé tes communes par lettres...
A
B
C
...
Et donc une variable pour chaque lettre, et donc quand tu cherche une commune, tu regarde sa premiere lettre et comme ca tu determine quel variable utilisé :S
Ok c'est ce que je craignais lol, tu peux tenter ca :
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 reg1 = new RegExp("[ ]+", "g"); reg3 = new RegExp(";", "g"); function completionLibelleCommune(valeur) { result =""; buffer = ""; valeur = valeur.toUpperCase(); // Création du tableau des mots-clés keywords = valeur.split(reg1); // Création du motif pattern = "^" + keywords[0]; for(i = 1; i < keywords.length; i++) { pattern += ".*" + keywords[1]; } pattern += ".*$"; reg2 = new RegExp(pattern, "gi"); for(i = 0, char = null; i < listeCommunes.length; i++) { char = listeCommunes[i]; if(char == "|") { datas = buffer.split(reg3); if(reg2.test(datas[1])) { result += datas[1] + " (" + datas[0] + ")<br/>"; } buffer = ""; } else { buffer += char; } } return result; }
En fait il faudrait réduire la liste au fur et à mesure mais de toute façon la chaîne de départ est un peu grande. Si tu dois absolument rester en JS, la soluce de cerede2000 me semble pas mal ^^. Tu peux aussi utiliser un arbre.
Djackisback,
La dernière implémentation plante carrément le navigateur (IE) :(
Je pense que le plus simple est de faire une regexp de chaine sur la variable. Car en tableau c'est pas possible de tenir la charge. La variable est une longue chaine composés de la manière suivante |code postal;nom-de-commune|
Le but étant de faire une recherche sur la chaine plutôt qu'un tableau.
J'essai d'optimiser de la manière suivante : \d{5};[a-zA-Z-]+| il trouve bien les codes postaux et déchiffre les noms des communes.
En faite le souci que j'ai maintenant c'est que je ne sais pas comment faire pour remplacer [a-zA-Z-] par deux chaines en dure.
Style \d{5};[chaine commençant par xxx, suivi par la chaine commencant par yyyy]|
Quelqu'un aurait une idée sans passer par des tableaux et en faisant une regexp du style : je cherche les codes postaux, puis je cherche les communes contenant les chaines que j'ai saisie dans mon champ ?
Merci
:calim2: personne ?
Ce sera encore pire si tu lances une regex sur ta chaîne de 1Mo. Si tu veux tenter :
Comme dit précédemment le stockage dans un tableau associatif par lettre ou suite de lettre, ou l'utilisation d'un arbre me semble le plus adapté.Code:
1
2
3
4
5
6 // Création du motif pattern = "([0-9]+)(;)" + "(" + keywords[0]; for(i = 1; i < keywords.length; i++) { pattern += "[-A-Z ]+" + keywords[1]; } pattern += "[-A-Z ]+)";
Et oui:mouarf:
J'ai du rater quelque chose...
ca ne retourne aucun résultat, ni même aucune erreur.
Comment mets tu en place ton code dans ma fonction ?
J'en terminerai avec ce sujet sur ce point.
Merci
comme ca :
La fonction intermédiaire creerDiv(tab) est pas une bonne idée car tu repasses la copie du valeur de grande taille.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 <script> reg1 = new RegExp("[ ]+", "g"); function completionLibelleCommune(valeur) { result =""; div = document.getElementById("donnees"); // Création du tableau des mots-clés keywords = valeur.split(reg1); // Création du motif pattern = "([0-9]+)(;)" + "(" + keywords[0]; for(i = 1; i < keywords.length; i++) { pattern += "[-A-Z ]+" + keywords[1]; } pattern += "[-A-Z ]+)"; reg2 = new RegExp(pattern, "gi"); matches = listeCommunes.match(reg2); div.innerHTML = ""; for(i = 0; i < matches.length; i++) { div.innerHTML += matches[i] + "<br/>"; } } </script> <input type="text" class="texte" id="completion_text" name="completion_text" onKeyUp="completionLibelleCommune(this.value);"> <div id="donnees"> </div>
Merci,
ça marche mieux en terme de temps de consommation CPU à 100%.
Par contre en parallèle on a cherché avec la méthode match qui donne des résultats formidable en plus de notre ancienne méthode de recherche par string et index.
Encore merci à vous tous pour votre aide.