Foros del Web » Programando para Internet » Javascript »

Calculadora de palabras

Estas en el tema de Calculadora de palabras en el foro de Javascript en Foros del Web. Hola a todos, una consulta, como puedo hacer en mi pagina una calculadora de palabras, quisiera que un usuario ponga un texto y automaticamente le ...
  #1 (permalink)  
Antiguo 31/08/2005, 08:04
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Exclamación Calculadora de palabras

Hola a todos, una consulta, como puedo hacer en mi pagina una calculadora de palabras, quisiera que un usuario ponga un texto y automaticamente le muestre cuantas palabras hay y que le aparezca un precio...

Como se puede hacer?

Espero su pronta ayuda

Gracias de antemano..
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #2 (permalink)  
Antiguo 31/08/2005, 08:13
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Si quieres que conforme el usuario este escribiendo le vaya modificando el valor al contador de palabras, es con javascript. Quizá en ese foro ya hayan post con lo que necesitas.
  #3 (permalink)  
Antiguo 05/09/2005, 21:02
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 10 meses
Puntos: 4
seria algo como ir contando los espacios entre palabras, y mirar qeu un espacio no sea doble espacio. cada que veas un espacio comenzaria una nueva palabra y aumentas el contador.
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 06/09/2005, 00:59
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Me he entretenido haciéndote esto. Te servirá?
Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
style>
    
textarea{
    
overflow:auto;
    
text-align:justify;
    }
    
input{text-align:right;}
    
    
input,textarea{
    
border:solid 1px black;
    
font:normal 10px/15px verdana;
    
color:navy;
    }
    </
style>
    <
script>
    
minimoLetras=3;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada

    
function contar(esto){
    if(
esto.value.charAt(esto.value.length-1)==" "){
    
numeroDePalabras=0;
    
textos=esto.value;
    
palabras=textos.split(" ");
    for(
a=0;a<palabras.length;a++){
    if(
palabras[a].length>=minimoLetras){
    
numeroDePalabras+=1;
    }
    }
    
document.forms['pepe']['palabras'].value=numeroDePalabras;
    }
    }
    
</script>
</head>

<body>
<form name="pepe">
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly>
</form>


</body>
</html> 
Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #5 (permalink)  
Antiguo 06/09/2005, 06:03
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 22 años, 10 meses
Puntos: 4
muy bueno,
hay palabras de una letra tambien,
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #6 (permalink)  
Antiguo 06/09/2005, 06:12
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Eso es cierto, lexus.

Si quieres puedes poner un 1 como valor de la variable minimoLetras y así también las contará. Lo he puesto así porque cuando me mandaban en la clase de inglés del colegio hacer redacciones de tantas palabras, nos decían que no contáramos las de menos de 3 letras. Así quee.... supuse que sería útil.

Me alegro de que te haya gustado!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #7 (permalink)  
Antiguo 06/09/2005, 06:19
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Me acabvo de dar cuenta de que faltaba algo para terminarlo: El poner el precio por palabra y el precio final. Ya lo he hecho. El precio se indica en precioPorPalabra.

Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
style>
    *{
font:normal 10px/15px verdana;}    
    
textarea{
    
overflow:auto;
    
text-align:justify;
    }
    
input{text-align:right;}

    
input,textarea{
    
border:solid 1px black;
    
color:navy;
    }
    </
style>
    <
script>
    
minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada
    
precioPorPalabra=0.2
    
function contar(esto){
    if(
esto.value.charAt(esto.value.length-1)==" "){
    
numeroDePalabras=0;
    
textos=esto.value;
    
palabras=textos.split(" ");
    for(
a=0;a<palabras.length;a++){
    if(
palabras[a].length>=minimoLetras){
    
numeroDePalabras+=1;
    }
    }
    
document.forms['pepe']['palabras'].value=numeroDePalabras;
    
document.forms['pepe']['precio'].value parseInt(numeroDePalabras precioPorPalabra 100)/100;
    }
    }
    
</script>
</head>

<body onLoad="document.forms['pepe']['porPalabra'].value=precioPorPalabra;">
<form name="pepe">
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras x <input type="text" name="porPalabra" id="porPalabra" size="5" maxlength="5"> = <input type="text" name="precio" id="precio" size="8" maxlength="8" readonly>
</form>


</body>
</html> 
Espero que te sea útil.
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #8 (permalink)  
Antiguo 06/09/2005, 08:28
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
KARLANKAS, gracias por el código, al escribir me muestra la cantidad y el precio, pero cuando copio un texto no me calcula la cantidad, como podria hacerlo para que funcione asi o derrpente haciendo un boton que diga CALCULAR y muestre la cantidad?
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #9 (permalink)  
Antiguo 06/09/2005, 08:30
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Después de pegar el texto pon un espacio. Creo que con eso bastará.
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #10 (permalink)  
Antiguo 06/09/2005, 08:33
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Eso hice pero no me lo lee, porq sucede eso??
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #11 (permalink)  
Antiguo 06/09/2005, 08:36
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Es curioso. Prueba con este código en el que he puesto unas modificaciones:

Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
style>
    *{
font:normal 10px/15px verdana;}    
    
textarea{
    
overflow:auto;
    
text-align:justify;
    }
    
input{text-align:right;}

    
input,textarea{
    
border:solid 1px black;
    
color:navy;
    }
    </
style>
    <
script>
    var 
minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada
    
var precioPorPalabra=0.2;
    var 
contarPalabrasTrasEspacio=false;//Ponlo en true si quieres que cuente las palabras sólo después de poner un espacio.
    
    
function contar(esto){
    if(
contarPalabrasTrasEspacio && esto.value.charAt(esto.value.length-1)!=" "){return false;}
    
numeroDePalabras=0;
    
textos=esto.value;
    
palabras=textos.split(" ");
    for(
a=0;a<palabras.length;a++){
    if(
palabras[a].length>=minimoLetras){
    
numeroDePalabras+=1;
    }
    }
    
document.forms['pepe']['palabras'].value=numeroDePalabras;
    
document.forms['pepe']['precio'].value parseInt(numeroDePalabras precioPorPalabra 100)/100;
    }
    
    
</script>
</head>

<body onLoad="document.forms['pepe']['porPalabra'].value=precioPorPalabra;">
<form name="pepe">
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras x <input type="text" name="porPalabra" id="porPalabra" size="5" maxlength="5"> = <input type="text" name="precio" id="precio" size="8" maxlength="8" readonly>
</form>


</body>
</html> 
Ahora está la variable contarPalabrasTrasEspacio que si se pone true hace que el script fucione como antes pero que si está en false (como aquí) cuenta la palabra en cuanto ésta supera el número mínimo de caracteres.
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #12 (permalink)  
Antiguo 06/09/2005, 08:40
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Gracias funcionó recontra bien , una ultima consulta porfa si quiero que el costo por palabra se jale desde una base de datos como se haria? yo manejo asp? seria factible eso??

Gracias de antemano y te agradezco mucho tu ayuda
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #13 (permalink)  
Antiguo 06/09/2005, 08:44
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Pues sí, suponte que sacas el dato con ASP de la base de datos, ya sólo tendrías que cambiar un poco el código cambiando:

var precioPorPalabra=0.2;

por:

var precioPorPalabra=<% Response write(variable) %>;

creo que es así, no? Perdona pero hace mucho que no manejo ASP. Pero supongo que captarás la idea: incrustas con ASP el valor dentro del javascript.

Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #14 (permalink)  
Antiguo 06/09/2005, 08:47
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Ok, si capto la idea pensaba que con el javascript era algo diferente:
Seria asi:
var precioporpalabra=<%=rs("precio")%>

Muchisimas Gracias por tu ayuda
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #15 (permalink)  
Antiguo 06/09/2005, 08:51
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Has de tener siempre clara una cosa: El código ASP se ejecuta en el servidor y el código javascript en el ordenador del visitante. Qué significa eso? Pues que cuando se ejecuta el javascript el código ASP ya ha generado la página, y por tanto ya ha puesto el precio de la palabra en el código javascript.

No hay por qué agradecerlo, lo he hecho de mil amores!

Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #16 (permalink)  
Antiguo 06/09/2005, 10:04
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
hOLAS, he notado que al escribir un texto y si en la ultima letra no le doy enter no me cuenta la palabra porq no le estoy dando el espacio para contar.. como podria contrarrestar eso??
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #17 (permalink)  
Antiguo 06/09/2005, 10:10
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Prueba con esto:

Código PHP:
<html>
<
head>
    <
title>Untitled</title>
    <
style>
    *{
font:normal 10px/15px verdana;}    
    
textarea{
    
overflow:auto;
    
text-align:justify;
    }
    
input{text-align:right;}

    
input,textarea{
    
border:solid 1px black;
    
color:navy;
    }
    </
style>
    <
script>
    var 
minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada
    
var precioPorPalabra=0.2;
    var 
contarPalabrasTrasEspacio=false;//Ponlo en true si quieres que cuente las palabras sólo después de poner un espacio.
    
    
function contar(esto){
    if(
contarPalabrasTrasEspacio && esto.value.charAt(esto.value.length-1)!=" "){return false;}
    
numeroDePalabras=0;
    
textos=esto.value;
    
textos=textos.split("\n").join(" ");
    
palabras=textos.split(" ");
    for(
a=0;a<palabras.length;a++){
    if(
palabras[a].length>=minimoLetras){
    
numeroDePalabras+=1;
    }
    }
    
document.forms['pepe']['palabras'].value=numeroDePalabras;
    
document.forms['pepe']['precio'].value parseInt(numeroDePalabras precioPorPalabra 100)/100;
    }
    
    
</script>
</head>

<body onLoad="document.forms['pepe']['porPalabra'].value=precioPorPalabra;">
<form name="pepe">
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras x <input type="text" name="porPalabra" id="porPalabra" size="5" maxlength="5"> = <input type="text" name="precio" id="precio" size="8" maxlength="8" readonly>
</form>


</body>
</html> 
He añadido una línea en la function.

Dime si ya va bien!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #18 (permalink)  
Antiguo 06/09/2005, 10:12
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Eres Un Trome(genio) Gracias :-d
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #19 (permalink)  
Antiguo 06/09/2005, 16:46
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Mientras no sea "Un trome tido" (Entrometido)... ;)

Me alegro de que te funcionara!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #20 (permalink)  
Antiguo 08/09/2005, 19:04
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Hola todos :

Me parece que hay un detalle más que habría que tener en cuenta. Seguramente todos los participantes en este tema viven en sitios donde nadie se va a ensuciar por una palabra de 20¢, pero no todo el mundo es así.

Como me interesaba el proyecto, lo abrí y lo probé. Por supuesto, lo primero que hice fue escribir un texto. Y lo segundo tratar de crackearlo.

Si separamos las palabras con guiones, puntos, comas ... las toma como una sola; y de esa forma puedo escribir el Quijote pagando un par de centavos.

Si no te ofendes, KarlanKas, agrego un par de líneas; y tampoco se puede agregar mucho más, porque el código está excelente.

Código HTML:
<html> 
<head> 
    <title>Untitled</title> 
    <style> 
    *{font:normal 10px/15px verdana;}     
    textarea{ 
    overflow:auto; 
    text-align:justify; 
    } 
    input{text-align:right;} 

    input,textarea{ 
    border:solid 1px black; 
    color:navy; 
    } 
    </style> 
    <script> 
    var minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada 
    var precioPorPalabra=0.2; 
    var contarPalabrasTrasEspacio=false;//Ponlo en true si quieres que cuente las palabras sólo después de poner un espacio. 
     
    function contar(esto){ 
    if(contarPalabrasTrasEspacio && esto.value.charAt(esto.value.length-1)!=" "){return false;} 
    numeroDePalabras=0; 
    textos=esto.value; 
    //textos=textos.split(/(\r\n)| (-)| (\.)| (\,)| (\_)| (\;)| (\u00a0)/).join(" "); 
    textos=textos.replace(/(ñ)| (á)| (é)| (í)| (ó)| (ú)| (ü)| (_)/gi , "x"); 
    textos=textos.split( /(\W)/).join(" "); 
    palabras=textos.split(" "); 
    for(a=0;a<palabras.length;a++){ 
    if(palabras[a].length>=minimoLetras){ 
    numeroDePalabras+=1; 
    } 
    } 
    document.forms['pepe']['palabras'].value=numeroDePalabras; 
    document.forms['pepe']['precio'].value = parseInt(numeroDePalabras * precioPorPalabra * 100)/100; 
    } 
     
    </script> 
</head> 

<body onLoad="document.forms['pepe']['porPalabra'].value=precioPorPalabra;"> 
<form name="pepe"> 
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras x <input type="text" name="porPalabra" id="porPalabra" size="5" maxlength="5"> = <input type="text" name="precio" id="precio" size="8" maxlength="8" readonly> 
</form> 


</body> 
</html> 
Aprovecho para explicar un poco las expresiones regulares

/(uno)|(otro)/ : las barras "/" encierran la expresión, y en este caso va a buscar en una cadena si existen los textos "uno" u "otro", ya que "|" es un operador OR.

g : es por "global". Busca en toda la cadena en vez de devuelver solamente la primera coincidencia.

i : es por "insensitive". No diferencia entre mayúsculas o minúsculas.

\W : vale como cualquier caracter que no sea alfanumérico, excepto el guión bajo ("_").

Por supuesto que los caracteres "ñ", "Á", "ü"... son alfabéticos para el español, pero no para javascript. Por eso hay un paso anterior al split().join(), y es reemplazar cada uno de esos caracteres por otro válido ( es este caso una "x" ) antes de cambiarlos con /(\W)/ .

Existen también "Ö", "ø", "ù", "ý", "þ"... pero no las incluyo porque supongo que no las van a usar.

Dejé en el código una línea anulada que fue mi primer intento, solo como un ejemplo más de patrones literales. Por supuesto, se borra.

saludos

furoya

P.D. : Ups!. Acabo de darme cuenta de que hay otra manera más de crackearlo. No la comento porque aún no sé cómo arreglarla.
Digamos que además de minimoLetras habría que agregar un maximoLetras

Última edición por furoya; 08/09/2005 a las 19:13
  #21 (permalink)  
Antiguo 09/09/2005, 03:59
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Muy interesantes tus mejoras, furoya!

No me había dado cuenta del problema de los caracteres extendidos (o como se llamen). Aunque por más que le doy vueltas no se me ocurre una palabra que solo tenga ñ, ç, á, é, í, ó, ú... pero me doy cuenta de que es necesario que esté dicha mejora. También el tema de los guiones es interesante.

Gracias a tu ayuda va a quedar un código a toda prueba. Yo es que soy demasiado inocente y creo que los códigos los va a utilizar gente con buena fe...

Un saludo!

P.D.- Ardo en deseos de conocer esta nueva forma de crakeo que has disfrutado. Pero me sienta mal que no lo digas hasta qe no encuentres la solución, así sólo te diviertes tú! Déjanos jugar a todos! Que es mi código, jopetas!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #22 (permalink)  
Antiguo 10/09/2005, 13:21
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Hola de nuevo :

sí, me porté muy canuto; pero fue porque no sabía si pepelucho ya lo estaba usando. No quise ayudar a que alguien le "robara".

Se me ocurrió a último momento, y después noté que era absurdo. Veamos.

El código debe ser para enviar telegramas o algo impreso. De otra forma se cobraría por bytes o peso de archivo.

Lo que pensé es que alguien con muy mala voluntad podría escribir

HolaÑÑCómoññestánññtodosÑÑñÑYoññestoyññbienÑÑ

Como la doble eñe no existe en ningún idioma, al recibir el mensaje se puede pasar por cualquier editor de texto con "Buscar y reemplazar" y cambiar
ññ por espacio
ÑÑ por punto
ñÑ por salto de línea
Ññ por coma
para obtener

Hola.Cómo están todos.
Yo estoy bien.


pero además de muy rebuscado, en este caso es absolutamente inútil.

No te vayas a apenar de ser inocente, KarlanKas. Peor sería tener mente criminal como yo

saludos

furoya
  #23 (permalink)  
Antiguo 11/09/2005, 02:25
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
No veas lo que me rompí la cabeza buscando un fallo del contador de palabras...y luego era un problema de picardía al usarlo... A mi me da que es para poner mensajes en las placas de los trofeos, eh?

Un saludo!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #24 (permalink)  
Antiguo 12/09/2005, 11:19
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Lo estás diciendo para hacerme sentir mal.

Pero mi analista me insiste en que no puedo hacerme responsable de todo. Y por esta vez voy a hacerle caso.

Otro tema : le erré fiero con

Cita:
...Existen también "Ö", "ø", "ù", "ý", "þ"... pero no las incluyo porque supongo que no las van a usar...
pensaba en el español castellano, pero sin mucho esfuerzo encontré canço, oïda, numèric solamente en catalán -ni quise buscar en gallego, vasco, ...-. Al final va a haber que agregarlos, y ya no sé si es tan práctico lo de \W. Como las vocales en ASCII vienen seguidas, tal vez se pueda asignar un rango. Habría que probarlo. No sé tanto de expresiones regulares.

Y tengo curiosidad por cómo llegaste a la conclusión de los trofeos; pero conociéndote no me animo a preguntar...

saludos

furoya
  #25 (permalink)  
Antiguo 01/10/2006, 19:58
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 11 meses
Puntos: 0
Este codigo esta muy bien, a alguien se le ocurre como modificarlo para calcular en vez de precio el tiempo de lectura, supongamos que una persona promedio lee 250 palabras por minuto como lograria calcular esto en segundos y minutos ???
__________________
:) Fernando Dichiera (:
[email protected]
  #26 (permalink)  
Antiguo 03/10/2006, 11:07
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Mira a ver si te sirve esto:

Código:
<html> 
<head> 
    <title>Untitled</title> 
    <style> 
    *{font:normal 10px/15px verdana;}     
    textarea{ 
    overflow:auto; 
    text-align:justify; 
    } 
    input{text-align:right;} 

    input,textarea{ 
    border:solid 1px black; 
    color:navy; 
    } 
    </style> 
    <script> 
	var palabrasPorMinuto=150;
    var minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada 
    var precioPorPalabra=0.2; 
    var contarPalabrasTrasEspacio=false;//Ponlo en true si quieres que cuente las palabras sólo después de poner un espacio. 
     
    function contar(esto){ 
    if(contarPalabrasTrasEspacio && esto.value.charAt(esto.value.length-1)!=" "){return false;} 
    numeroDePalabras=0; 
    textos=esto.value; 
    //textos=textos.split(/(\r\n)| (-)| (\.)| (\,)| (\_)| (\;)| (\u00a0)/).join(" "); 
    textos=textos.replace(/(ñ)| (á)| (é)| (í)| (ó)| (ú)| (ü)| (_)/gi , "x"); 
    textos=textos.split( /(\W)/).join(" "); 
    palabras=textos.split(" "); 
    for(a=0;a<palabras.length;a++){ 
    if(palabras[a].length>=minimoLetras){ 
    numeroDePalabras+=1; 
    } 
    } 
    document.forms['pepe']['palabras'].value=numeroDePalabras; 
    document.forms['pepe']['precio'].value = parseInt(numeroDePalabras * precioPorPalabra * 100)/100;
	minutos=parseInt(numeroDePalabras/palabrasPorMinuto);
	segundos=parseInt(((numeroDePalabras/palabrasPorMinuto)-minutos)*60);
	minutos2=(minutos<10)?"0"+minutos:minutos;
	segundos2=(segundos<10)?"0"+segundos:segundos;
	document.forms['pepe']['tiempo'].value = minutos2+":"+segundos2;
    } 
     
    </script> 
</head> 

<body onLoad="document.forms['pepe']['porPalabra'].value=precioPorPalabra;"> 
<form name="pepe"> 
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea> <input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras x <input type="text" name="porPalabra" id="porPalabra" size="5" maxlength="5"> = <input type="text" name="precio" id="precio" size="8" maxlength="8" readonly> 
<br>
Tardarás en leerlo <input type="text" readonly name="tiempo"> minutos.
</form> 


</body> 
</html>
Puedes poner la cantidad de palabras que se leen por minuto en la variable palabrasPorMinuto.

Un saludo
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #27 (permalink)  
Antiguo 03/10/2006, 11:15
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Otra opción:

Código:
<html> 
<head> 
    <title>Untitled</title> 
    <style> 
    *{font:normal 10px/15px verdana;}     
    textarea{ 
    overflow:auto; 
    text-align:justify; 
    } 
    input{text-align:right;} 

    input,textarea{ 
    border:solid 1px black; 
    color:navy; 
    } 
    </style> 
    <script> 
	var palabrasPorMinuto=150;
    var minimoLetras=1;//Cuantas letras tiene que tener como mínimo la palabra para ser contabilizada 
    var contarPalabrasTrasEspacio=false;//Ponlo en true si quieres que cuente las palabras sólo después de poner un espacio. 
     
    function contar(esto){ 
    if(contarPalabrasTrasEspacio && esto.value.charAt(esto.value.length-1)!=" "){return false;} 
    numeroDePalabras=0; 
    textos=esto.value; 
    //textos=textos.split(/(\r\n)| (-)| (\.)| (\,)| (\_)| (\;)| (\u00a0)/).join(" "); 
    textos=textos.replace(/(ñ)| (á)| (é)| (í)| (ó)| (ú)| (ü)| (_)/gi , "x"); 
    textos=textos.split( /(\W)/).join(" "); 
    palabras=textos.split(" "); 
    for(a=0;a<palabras.length;a++){ 
    if(palabras[a].length>=minimoLetras){ 
    numeroDePalabras+=1; 
    } 
    } 
    document.forms['pepe']['palabras'].value=numeroDePalabras; 
    minutos=parseInt(numeroDePalabras/palabrasPorMinuto);
	segundos=parseInt(((numeroDePalabras/palabrasPorMinuto)-minutos)*60);

	document.getElementById("tiempo").innerHTML="Tardarás en leerlo "+minutos+" minutos y "+segundos+ " segundos (a una velocidad de "+palabrasPorMinuto+" palabras por minuto).";
    } 
     
    </script> 
</head> 

<body> 
<form name="pepe"> 
<textarea onkeyup="contar(this)" cols="50" rows="10" name="texto" id="texto"></textarea>
<input type="text" name="palabras" id="palabras" size="3" maxlength="3" readonly> palabras. 
<p id="tiempo"></p>
</form> 


</body> 
</html>
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #28 (permalink)  
Antiguo 03/10/2006, 22:56
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 11 meses
Puntos: 0
De acuerdo

A las FAQ A las FAQ KarlanKas postealo a las preguntas frecuentes seguro sera de utilidad !!!
__________________
:) Fernando Dichiera (:
[email protected]
  #29 (permalink)  
Antiguo 08/11/2006, 08:03
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Ese último ejemplo está muy bien, KarlanKas . Cuando vi la pegunta de fermdp no se me ocurrió qué contestarle, y decidí no hacerlo; por eso al encontrar que había una respuesta me dio curiosidad.

Aún así, la idea me siguió dando vueltas en la cabeza, y ahora aprovecho este mensaje para sugerir un paso más adelante. (No te asustes!, no pienso meter mano en tu código, sólo tiro un par de datos).

Cuando es necesario controlar, limitar y/o verificar la velocidad de lectura para un texto, un recurso bastante preciso es meterlo en una "marquesina"; o su versión más violenta : el RSVP ( Rapid Serial Visual Presentation ) .
También existe una tecnología (me parece que es flash) que permite interactuar con un documento a través de una webcam, pero no creo que el FlashScript esté tan avanzado como para interpretar el movimiento de los ojos.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:29.