remplacer des caracteres

remplacer des caracteres - HTML/CSS - Programmation

Marsh Posté le 21-07-2008 à 16:05:06    

Je souhaiterai avoir une fonction en javascript qui recherche dans une chaine les different suivi de zero consécutif et qui les marques à l'aide de lettre pour pouvoir reformer la chaine initial.
 
ex :  
on part de :
LC012001010000
 
on obtien aprés traitement avec a = 1 zéro, b = 2 zéro etc...:  
 
LCa12B1a1d
 
et ensuite il faudrais retrouver la chaine originale :
 
LC012001010000

Reply

Marsh Posté le 21-07-2008 à 16:05:06   

Reply

Marsh Posté le 21-07-2008 à 23:34:29    

Code :
  1. <html>
  2.     <head>
  3.         <title></title>
  4.     <script>
  5.         var myString = 'LC01200101000100000400000500006000400000003000000020000000050000000003';
  6.         
  7.         /* encode la chaine LC0120010001 en LCa12b1c1 */
  8.         function encodeStr(str) {
  9.             var alpha = 'abcdefghijklmnopqrstuvwxyz';
  10.             
  11.             //on parcours la chaine de lettres en partant de la fin, cela permet de remplacer d'abord les plus grands groupes de zeros et de finir par les plus petits.
  12.             for (var i=alpha.length-1; i>=0; i--) {
  13.                 //on utilise une expression reguliere du type : /0{X}/g  ou X est le nombre de zeros à remplacer
  14.                 str = str.replace(new RegExp('0{'+(i+1)+'}','g'),alpha[i]);
  15.             }
  16.             return str;
  17.         }
  18.         
  19.         /* fait l'inverse de la fonction précédente */
  20.         function decodeStr(str) {
  21.             var alpha = 'abcdefghijklmnopqrstuvwxyz';
  22.             // cette fonction permet d'avoir le nombre de zeros demandes
  23.             function getZeros(num) {
  24.                 var str='';
  25.                 for (var i=1; i<=num; i++)
  26.                     str+=0;
  27.                 return str;
  28.             }
  29.             
  30.             // maintenant on remplace la lettre par le nombre de zeros necessaires
  31.             for (var i=alpha.length-1; i>=0; i--) {
  32.                 str = str.replace(new RegExp(alpha[i],'g'), getZeros(i+1));
  33.             }
  34.             return str;
  35.         }
  36.         
  37.         console.log(myString);  //LC01200101000100000400000500006000400000003000000020000000050000000003
  38.         console.log(encodeStr(myString));  //LCa12b1a1c1e4e5d6c4g3g2h5i3
  39.         console.log(decodeStr(encodeStr(myString))); //LC01200101000100000400000500006000400000003000000020000000050000000003
  40.     </script>    
  41.     </head>
  42.     <body>
  43.         
  44.     </body>
  45. </html>


j'ai bizarrement l'impression que ton truc ressemble à un exercice [:petrus75]


Message édité par gatsu35 le 21-07-2008 à 23:36:01
Reply

Marsh Posté le 22-07-2008 à 09:09:25    

Merci beaucoup sa marche très bien.  
 
J'ai une autre question :  
Comment faire pour enlever tout se qui se trouve devant un nombre
Par exemple que : B 000002219711 devienne 2219711  
 

Reply

Marsh Posté le 22-07-2008 à 09:45:42    

J'ai un souci avec la méthode new RegExp elle me met undifined quand j'utilise internet explorer, et marche très bien avec mozilla

Reply

Marsh Posté le 22-07-2008 à 09:51:57    

Il semblerai qu'il faille mettre des "?" à certain endroit. Mais où?
 
str = str.replace(new RegExp('0{'+(i+1)+'}','g'),alpha[i]);

Reply

Marsh Posté le 22-07-2008 à 10:26:47    

bon au temps pour moi, il fallait forcément avoir alpha en tant que tableau

 
Code :
  1. <html>
  2. <head>
  3.  <title></title>
  4. <script>
  5.  var myString = 'LC01200101000100000400000500006000400000003000000020000000050000000003';
  6.  /* encode la chaine LC0120010001 en LCa12b1c1 */
  7.  function encodeStr(str) {
  8.   var alpha = 'abcdefghijklmnopqrstuvwxyz'.split('');
  9.   //on parcours la chaine de lettres en partant de la fin, cela permet de remplacer d'abord les plus grands groupes de zeros et de finir par les plus petits.
  10.   for (var i=alpha.length-1; i>=0; i--) {
  11.    //on utilise une expression reguliere du type : /0{X}/g  ou X est le nombre de zeros à remplacer
  12.    str = str.replace(new RegExp('0{'+(i+1)+'}','g'),alpha[i]);
  13.   }
  14.   return str;
  15.  }
  16.  /* fait l'inverse de la fonction précédente */
  17.  function decodeStr(str) {
  18.   var alpha = 'abcdefghijklmnopqrstuvwxyz'.split('');
  19.   // cette fonction permet d'avoir le nombre de zeros demandes
  20.   function getZeros(num) {
  21.    var str='';
  22.    for (var i=1; i<=num; i++)
  23.     str+=0;
  24.    return str;
  25.   }
  26.   // maintenant on remplace la lettre par le nombre de zeros necessaires
  27.   for (var i=alpha.length-1; i>=0; i--) {
  28.    str = str.replace(new RegExp(alpha[i],'g'), getZeros(i+1));
  29.   }
  30.   return str;
  31.  }
  32.  
  33.  document.write(myString + '<br>');  //LC01200101000100000400000500006000400000003000000020000000050000000003
  34.  document.write(encodeStr(myString) + '<br>');  //LCa12b1a1c1e4e5d6c4g3g2h5i3
  35.  document.write(decodeStr(encodeStr(myString)) + '<br>'); //LC01200101000100000400000500006000400000003000000020000000050000000003
  36. </script>   
  37. </head>
  38. <body>
  39. </body>
  40. </html>


Message édité par gatsu35 le 22-07-2008 à 11:11:12
Reply

Marsh Posté le 22-07-2008 à 11:16:09    

MErci sa marche nikel.
J'ai une autre question :  
Comment faire pour enlever tout se qui se trouve devant un nombre
Par exemple que : B 000002219711 devienne 2219711  

Reply

Marsh Posté le 22-07-2008 à 11:24:53    

Code :
  1. var str = 'B 000002219711';
  2. var match = str.match(/(\d+)$/g); //["000002219711"]
  3. var result = 0;
  4. if (match) { //si la regexp a retourné quelque chose de potable
  5.  var result = parseInt(match[0],10) //transforme le resultat en nombre entier, attention bien sur à mettre la base de conversion (10) sinon le parseint ira chercher la base la plus adéquat pour ce nombre ('c'est à dire octal)
  6. }

Reply

Marsh Posté le 22-07-2008 à 11:45:05    

C'est parfait, je te remercie bien.

Reply

Marsh Posté le 22-07-2008 à 15:00:44    

Comment traduire cette fonction en langage php?
 
function decodeStr(str)  
{
 var alpha = 'abcdefghijklmnopqrstuvwxyz';
 alpha=alpha.split('');
 // cette fonction permet d'avoir le nombre de zeros demandes
 function getZeros(num)  
 {
  var str='';
  for (var i=1; i<=num; i++)
  str+=0;
  return str;
 }
 // maintenant on remplace la lettre par le nombre de zeros necessaires
    for (var i=alpha.length-1; i>=0; i--)  
 {
  str = str.replace(new RegExp(alpha[i],'g'), getZeros(i+1));
 }
   return str;
}

Reply

Marsh Posté le 22-07-2008 à 15:00:44   

Reply

Marsh Posté le 22-07-2008 à 15:18:55    

Voila se que sa donne mais j'ai une erreur sur cette ligne :  
 
$str = str_replace($alpha[$i],$str), getZeros($i+1));
 
 
/* fait l'inverse de la fonction précédente */
function decodeStr($str)  
{
 $alpha = 'abcdefghijklmnopqrstuvwxyz';
 $alpha=split('',$alpha);
 // cette fonction permet d'avoir le nombre de zeros demandes
 function getZeros($num)  
 {
  $str='';
  for ($i=1; $i<=num; $i++)
  $str+=0;
  return $str;
 }
 // maintenant on remplace la lettre par le nombre de zeros necessaires
    for ($i=strlen($alpha)-1; $i>=0; $i--)  
 {
  $str = str_replace($alpha[$i],$str), getZeros($i+1));
 }
   return $str;
}

Reply

Marsh Posté le 23-07-2008 à 15:59:21    

J'utilise des cookie et je viens de m'apercevoir que la taille limite pour les cookie qui et de 4ko et une taille global et n'est pas de 4ko pour chaque cookie. ya t'il un moyen de contourner se probleme?

Reply

Marsh Posté le 23-07-2008 à 22:31:24    

nan et c'est normal, les cookies sont envoyés au serveur par ton navigateur, donc il est impératif de limiter les cookie et leur poids
 
si tu bouffes du cookie c'est que tu as une très mauvaise gestion des infos user. Utilise plutôt les sessions, ca passera largement mieux

Reply

Marsh Posté le 24-07-2008 à 10:10:13    

ba en faite si j'ai choisi d'utilisé les cookies, c'est par dépi, car j'utilise un windows Ce qui doit pouvoir fonctionner en mode autonome si il n'y a plus de wifi. J'avais donc utilisé un fichier texte au départ, ceci fonctionnait trés bie nsur pc mais sur le windows CE l'activeX ne reconnaissait pas le bloc note, ou word etc....

Reply

Marsh Posté le 24-07-2008 à 13:20:36    

activeX ? mais nan quoi pas d'activeX
je sens clairement que t'es parti pour faire du nawak, car là je vois du PHP, du JS, du cookie et là tu me parle d'activeX :(
 
et jvois pas pourquoi ça doit être autonome ? c'est une appli qui est en local sur ta machine ?

Reply

Marsh Posté le 24-07-2008 à 14:32:32    

oui c sur d pistolet code à barre et y a déjà des programme en php. Mais le souci c'est que pour parait au éventuel panne de wifi ou de serveur il faut que le pistolet puisse continuer à biper des produits mais en local forcément (c'est en milieu industriel)

Reply

Marsh Posté le 24-07-2008 à 14:46:11    

ben faudrait un serveur en local, mais surtout faudrait surtout pas que ce soit fait en php ou si c'est le cas faudrait faire en sorte que ce soit compilé

Reply

Marsh Posté le 24-07-2008 à 15:05:29    

j'ai réalisais le truc en javascript.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed