Foros del Web » Programando para Internet » Javascript »

comparar campos

Estas en el tema de comparar campos en el foro de Javascript en Foros del Web. trato de buscar palabras incluidas en un textarea que esten en otro textarea, si alguna palabra no esta en el otro textarea se manda un ...
  #1 (permalink)  
Antiguo 06/06/2003, 13:14
 
Fecha de Ingreso: junio-2003
Ubicación: Quilicura
Mensajes: 14
Antigüedad: 21 años, 7 meses
Puntos: 0
comparar campos

trato de buscar palabras incluidas en un textarea que esten en otro textarea, si alguna palabra no esta en el otro textarea se manda un mensaje........

tengo algo asi

val2 contiene los valores del texttarea 2
y

pal contiene los valores del texttarea 1


palarr = pal.split("\n");


tareax= val2.split(" ");


ee = String(tareax);



for (i=0;i<tareax.length; i++)
{



if(ee.indexOf(String(palarr[i])) == -1)
{

cont++;
}

}



entones si cont es distinto dee cero "manda mensaje"

por fa

saludos y gracias
  #2 (permalink)  
Antiguo 06/06/2003, 14:29
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Ajá...pero...¿y la pregunta?
  #3 (permalink)  
Antiguo 06/06/2003, 14:46
 
Fecha de Ingreso: junio-2003
Ubicación: Quilicura
Mensajes: 14
Antigüedad: 21 años, 7 meses
Puntos: 0
la pregunta ?? bueno es como veo o cuento las palabras que estan en un texttarea y no en el otro.....
please.....
  #4 (permalink)  
Antiguo 06/06/2003, 15:21
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Ya me pongo afiller, esperame unos minutos.

Saludos.

----------------------------------------- Minutos mas tarde -----------------------------------------


Prueba esto:

Código PHP:
<html>
 <
head>
  <
script language="JavaScript">

   function 
comunes(aIzqaDer){
    var 
ijnRessPal;
    
nRes 0;
    
sPal "";
    for (
0aIzq.lengthi++)
     for (
0aDer.lengthj++)
      if (
aIzq[i] == aDer[j])
       if (
sPal.indexOf(aIzq[i]) == -1){
        
nRes++;
        
sPal += " " aIzq[i];
       }
    
document.frm.comunes.value String(nRes);
   }

   function 
soloEnA(aIzqaDer){
    var 
ijnRessPalbPresente;
    
nRes 0;
    
sPal "";
    for (
0aIzq.lengthi++){
     
bPresente false;
     for (
0; (aDer.length) && !bPresentej++)
      
bPresente = (aIzq[i] == aDer[j])
     if (!
bPresente && (sPal.indexOf(aIzq[i]) == -1)){
      
nRes++;
      
sPal += " " aIzq[i];
     }
    }
    
document.frm.soloA.value String(nRes);
   }

   function 
soloEnB(aIzqaDer){
    var 
ijnRessPalbPresente;
    
nRes 0;
    
sPal "";
    for (
0aDer.lengthi++){
     
bPresente false;
     for (
0; (aIzq.length) && !bPresentej++)
      
bPresente = (aDer[i] == aIzq[j])
     if (!
bPresente && (sPal.indexOf(aDer[i]) == -1)){
      
nRes++;
      
sPal += " " aDer[i];
     }
    }
    
document.frm.soloB.value String(nRes);
   }

   function 
calcula(){
    var 
aIzqaDer;
    
aIzq document.frm.texto.value.split(" ");
    
aDer document.frm.diccionario.value.split(" ");
    
comunes(aIzqaDer);
    
soloEnA(aIzqaDer);
    
soloEnB(aIzqaDer);
   }
  
</script>
 </head>
 <body>
  <form name="frm">
   <table border="0">
    <tr>
     <td align="center">
      Area A
     </td>
     <td align="center">
      Area B
     </td>
    </tr>
    <tr>
     <td align="left">
      <textarea name="texto" onkeyup="calcula()"></textarea>
     </td>
     <td align="right">
      <textarea name="diccionario" onkeyup="calcula()"></textarea>
     </td>
    </tr>
    <tr>
     <td colspan="2" align="center">
      <table border="0">
       <tr>
        <td align="left">
         En A y no en B
        </td>
        <td align="center">
         Comunes
        </td>
        <td align="right">
         En B y no en A
        </td>
       </tr>
       <tr>
        <td align="left">
         <input type="text" name="soloA">
        </td>
        <td align="center">
         <input type="text" name="comunes">
        </td>
        <td align="right">
         <input type="text" name="soloB">
        </td>
       </tr>
      </table>
     </td>
    </tr>
   </table>
  </form>
 </body>
</html> 
Saludos.
  #5 (permalink)  
Antiguo 10/06/2003, 13:42
 
Fecha de Ingreso: junio-2003
Ubicación: Quilicura
Mensajes: 14
Antigüedad: 21 años, 7 meses
Puntos: 0
surge otro problem....snif, lo que pasa es que un valor se rescata asi
aIzq = document.frm.texto.value.split(" ");
y el otro asi
aDer = document.frm.diccionario.value.split("\n");

osea son palabras de la siguiente forma
al
bo
co
bo
por lo cual no resulta ,como podria dejar despues de capturar
aDer = document.frm.diccionario.value.split("\n ");
de la forma
aDer = document.frm.diccionario.value.split(" ");
para despues hacer la comparacion..????porfaaa

alguien podria ayudarme porfaaaaaaaaaaaaaaaaavor

Última edición por afiller; 10/06/2003 a las 13:42
  #6 (permalink)  
Antiguo 10/06/2003, 15:46
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Hola de nuevo afiller.

Hice dos correciones.

1.- Los separadores pueden ser espacios, o comas, o puntos, o puntos y coma o dos puntos (facilmente podrás ampliarlo a lo que necesite).
2.- Toma en cuenta los saltos de linea como separador de palabra.

Revisa y hablamos.

Código PHP:
<html>
 <
head>
  <
script language="JavaScript">

   function 
separa(sTxtsSep){
    var 
sTx2 "";
    var 
bPalabra false;
    for (var 
0sTxt.lengthj++){
     if (
sSep.indexOf(sTxt.charAt(j)) != -1){
      if (
bPalabrasTx2 += " ";
      
bPalabra false;
     } else {
      
bPalabra true;
      
sTx2 += sTxt.charAt(j);
     }
    }
    return 
sTx2;
   }

   function 
comunes(aIzqaDer){
    var 
ijnRessPal;
    
nRes 0;
    
sPal "";
    for (
0aIzq.lengthi++)
     for (
0aDer.lengthj++)
      if (
aIzq[i] == aDer[j])
       if (
sPal.indexOf(aIzq[i]) == -1){
        
nRes++;
        
sPal += " " aIzq[i];
       }
    
document.frm.comunes.value String(nRes);
   }

   function 
soloEnA(aIzqaDer){
    var 
ijnRessPalbPresente;
    
nRes 0;
    
sPal "";
    for (
0aIzq.lengthi++){
     
bPresente false;
     for (
0; (aDer.length) && !bPresentej++)
      
bPresente = (aIzq[i] == aDer[j])
     if (!
bPresente && (sPal.indexOf(aIzq[i]) == -1)){
      
nRes++;
      
sPal += " " aIzq[i];
     }
    }
    
document.frm.soloA.value String(nRes);
   }

   function 
soloEnB(aIzqaDer){
    var 
ijnRessPalbPresente;
    
nRes 0;
    
sPal "";
    for (
0aDer.lengthi++){
     
bPresente false;
     for (
0; (aIzq.length) && !bPresentej++)
      
bPresente = (aDer[i] == aIzq[j])
     if (!
bPresente && (sPal.indexOf(aDer[i]) == -1)){
      
nRes++;
      
sPal += " " aDer[i];
     }
    }
    
document.frm.soloB.value String(nRes);
   }

   function 
calcula(){
    var 
sIzqsDeraIzqaDer;
    
sIzq separa(document.frm.texto.value";.,:");
    
sDer separa(document.frm.diccionario.value";.,:");
    
sIzq sIzq.replace(/[rnf]/g" ");
    
sDer sDer.replace(/[rnf]/g" ");
    
aIzq sIzq.split(" ");
    
aDer sDer.split(" ");
    
comunes(aIzqaDer);
    
soloEnA(aIzqaDer);
    
soloEnB(aIzqaDer);
   }
  
</script>
 </head>
 <body>
  <form name="frm">
   <table border="0">
    <tr>
     <td align="center">
      Area A
     </td>
     <td align="center">
      Area B
     </td>
    </tr>
    <tr>
     <td align="left">
      <textarea name="texto" onkeyup="calcula()"></textarea>
     </td>
     <td align="right">
      <textarea name="diccionario" onkeyup="calcula()"></textarea>
     </td>
    </tr>
    <tr>
     <td colspan="2" align="center">
      <table border="0">
       <tr>
        <td align="left">
         En A y no en B
        </td>
        <td align="center">
         Comunes
        </td>
        <td align="right">
         En B y no en A
        </td>
       </tr>
       <tr>
        <td align="left">
         <input type="text" name="soloA">
        </td>
        <td align="center">
         <input type="text" name="comunes">
        </td>
        <td align="right">
         <input type="text" name="soloB">
        </td>
       </tr>
      </table>
     </td>
    </tr>
   </table>
  </form>
 </body>
</html> 
Saludos.
  #7 (permalink)  
Antiguo 12/06/2003, 14:08
 
Fecha de Ingreso: junio-2003
Ubicación: Quilicura
Mensajes: 14
Antigüedad: 21 años, 7 meses
Puntos: 0
avance

hola de nuevo Kaopectate


el problema lo aborde comparando los arreglos

pero el maldito "pero"...

al tener
s = hola , chau, etc ;
for (i=0;i<tronco.length;i++)

{

if (s.indexOf(String(tronco[i])) == -1)
{
p += tronco[i] + " " ;
alert(p);
}

}

Cuando viene en el arreglo tronco la palabra "hol" la toma como si estuviera en la cadena s

osea como comparo "hol" = "hola" completamente para que no tome "hol" como subcadena de hola???
porfa maestro...

Kaopectate estas ahiii please es que no se como hacerlo para que compare palabras y no subcadenas como por ej: hola con hol
daria un true siendo que es false
podria ser con s.indexOf(String(tronco[i])) pero con algun parametro?????? en la cadena s las palabras estan separadas con espacios por si acaso......

Última edición por afiller; 12/06/2003 a las 14:08
  #8 (permalink)  
Antiguo 12/06/2003, 14:20
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 23 años
Puntos: 38
Hola de nuevo afiller.

Si lo haces usando arreglos te evitas ese problema. Ahora bien, si necesitas hacerlo sobre strings, entonces yo probaría comparar la palabra " " + palabra + " " contra la cadena.

Para ello necesitas garantizar que la cadena que actúa como diccionario tenga un blanco al principio y otro al final.

Prueba con algo como:

Código:
s = " " + s + " ";
if (s.indexOf(" " + tronco[i] + " ") == -1)
No estoy seguro de como tienes tu código, pero la idea sería mas o menos como te lo escribí.

Es muy importante que tengas espacios en blanco antes de todas las palabras de la lista (incluyendo la primera y la última palabra). No importa si tienes mas de un espacio, igual funciona.

Saludos.
  #9 (permalink)  
Antiguo 12/06/2003, 15:34
 
Fecha de Ingreso: junio-2003
Ubicación: Quilicura
Mensajes: 14
Antigüedad: 21 años, 7 meses
Puntos: 0
gracias "peros"

muchas gracias funciono perfecto maestroooooo.....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.