Foros del Web » Programando para Internet » Javascript »

Contar cantidad de oraciones y parrafos en textarea

Estas en el tema de Contar cantidad de oraciones y parrafos en textarea en el foro de Javascript en Foros del Web. Buenas tardes ;) Me surge un problema contando la cantidad de oraciones, saltos de linea o filas que hay en un textarea. Actualmente tengo esto ...

  #1 (permalink)  
Antiguo 22/10/2014, 08:22
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Contar cantidad de oraciones y parrafos en textarea

Buenas tardes ;)

Me surge un problema contando la cantidad de oraciones, saltos de linea o filas que hay en un textarea.

Actualmente tengo esto para contar las filas:

Código PHP:
Ver original
  1. $lineas = substr_count($string,"\n") +1;

Ahí si el usuario está escribiendo en el text area, y le da a la tecla ENTER está generando un \n lo cal lo contabiliza bien.

El problema surge en que si pego un texto en el text area, el usuario no ha generado ningún \n por lo cual no contabiliza ningún tipo de salto de linea.

También si el usuario se encuentra escribiendo y directamente sin darle al ENTER el ancho de la linea supera el ancho del textarea obviamente se produce un salto de linea automático, el cual tampoco se contabiliza.

Si el usuario escibre una frase, le da al ENTER 2 veces para dejar un espacio vertical entre oraciones obviamente esta la contabiliza como otro salto de linea, cuando no debería serlo.

La verdad es que no se como empezar ni que funciones son las que tengo que usar para realizar esto correctamente.

Agradezco la ayuda. Un saludo
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 22/10/2014, 08:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Lo que pides es más bien un problema de javascript porque quieres interacción con el usuario. Lo mejor es que consultes en el foro de javascript o esperar a que un moderador mueva el tema.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/10/2014, 08:59
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

La verdad es que estaba buscando realizarlo en php que supongo que se podrá realizar también, ya que todo lo demás lo tengo también en php, y no querría pasarlo todo a javascript ya que si de php tengo conocimientos bajos, de javascript ni hablemos ya xd
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 22/10/2014, 09:06
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Si pero ese tipo de interacción es de javascript porque quieres hacerlo inmediatamente con el usuario y no esperar a que el usuario someta la información y luego hacer el conteo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 22/10/2014, 09:43
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Si, efecitvamente sería más eficiente hacerlo en java, veré si alguien puede ayudarme enfocándolo así
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #6 (permalink)  
Antiguo 22/10/2014, 13:35
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Contar cantidad de oraciones y parrafos en textarea

En JavaScript sería bastante sencillo, te pongo un ejemplo:

  #7 (permalink)  
Antiguo 22/10/2014, 14:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

siento decirte PHPeros que no hay 4 saltos de línea, hay 3. se puede usar expresiones regulares para que funciones en windows, unix y mac
Cita:
function saltosDeLinea() {
alert('Hay ' + (document.getElementById("textarea").value.match(/\r\n|\n|\r/g).length-1) + ' saltos de línea.');
}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #8 (permalink)  
Antiguo 23/10/2014, 07:22
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Sigue pasando lo mismo:

El problema surge en que si pego un texto en el text area, el usuario no ha generado ningún \n por lo cual no contabiliza ningún tipo de salto de linea.

También si el usuario se encuentra escribiendo y directamente sin darle al ENTER el ancho de la linea supera el ancho del textarea obviamente se produce un salto de linea automático, el cual tampoco se contabiliza.

Si el usuario escibre una frase, le da al ENTER 2 veces para dejar un espacio vertical entre oraciones obviamente esta la contabiliza como otro salto de linea, cuando no debería serlo.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #9 (permalink)  
Antiguo 23/10/2014, 07:32
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Cita:
Iniciado por rodrypaladin Ver Mensaje
También si el usuario se encuentra escribiendo y directamente sin darle al ENTER el ancho de la linea supera el ancho del textarea obviamente se produce un salto de linea automático, el cual tampoco se contabiliza.
no me queda claro si en este caso se ha de contabilizar o no como nueva línea

este código cubre las otras dos opciones y no contabiliza en el caso citado
Código:
console.log('Hay ' + (document.getElementById("textarea").value.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1) + ' frases');
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #10 (permalink)  
Antiguo 27/10/2014, 13:31
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Aprovecho el hilo para un aspecto que está directamente relacionado:

Intento contar las palabras y caracteres y los muestro, eso lo he conseguido.

Ahora intento aplicar las excepciones, como ya comenté anteriormente:

espacios al empezar la linea, espacios al terminar la linea, y espacios dobles triples o suepriores.. pero eso no lo consigo. pero se ve que no las aplica, pego mi código:

Código Javascript:
Ver original
  1. <html>
  2.     <head>
  3.     <script type="text/javascript">
  4.         function mostrar() {
  5.             //cogemos el texto del textarea
  6.             var texto = document.getElementById("area").value;
  7.             //contamos sus caracteres
  8.             var caracteres = texto.length;
  9.             //dividimos el texto a una array con el separador ESPACIO
  10.             var textoDividido = texto.split(" ");
  11.             //contamos los elementos separados, en este caso palabras
  12.             var palabras = textoDividido.length;
  13.             //insertamos html en las etiquetas carac y palabras
  14.             document.getElementById("carac").innerHTML = caracteres;
  15.             document.getElementById("palabras").innerHTML = palabras;
  16.             /* Ahora tenemos que poner excepciones, como pro ejemplo espacios delante y detrás del texto, o espacios dobles, triples o superiores. */
  17.             primerBlanco = /^[ ]+/;
  18.             ultimoBlanco = / $/;
  19.             variosBlancos = /[ ]+/g;
  20.             //Ahora aplicamos las excepciones;
  21.             texto = texto.replace(variosBlanco," ");
  22.             texto = texto.replace(primerBlanco, "");
  23.             texto = texto.replace(ultimoBlanco, "");
  24.             var textoTroceado = texto.split(texto, " ");
  25.             palabras = textoTroceado.length;
  26.         }
  27.     </script>
  28.     </head>
  29.     <body>
  30.         <form>
  31.         <textarea id="area" onkeyup="mostrar();"></textarea><br/>
  32.         Caracteres:<p id="carac">0</p>
  33.         Palabras:<p id="palabras">0</p>
  34.         </form>
  35.     </body>
  36. </html>

He intentado poner los getElementById("id")inner.HTML = id debajo de los replace, pero en ese caso directamente no muestra los caracteres o palabras, los deja a 0

Un saludo y mil gracias de nuevo.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #11 (permalink)  
Antiguo 27/10/2014, 15:17
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Código Javascript:
Ver original
  1. var textoTroceado = texto.split(texto, " ");

Eso no parece correcto.
  #12 (permalink)  
Antiguo 27/10/2014, 17:15
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

aparte de ese error, no es necesario hacer tantos replace, de hecho no hace falta ninguno, para contar las palabras. solo es necesario usar \b que marca la posición de una cadena limitada por espacios en blanco

Cita:
console.log(texto.match(/\b[\da-z\xc0-\xff]+\b/gi).length);
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #13 (permalink)  
Antiguo 27/10/2014, 17:45
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

cierto, pero tiene que haber algo más en lo que me equivoco ya que sogue pasando lo mismo.

EDITO:
Si empiezo a escribir en el textarea con espacios, ponga los que ponga no los cuenta, hasta ahí bien.
Si una vez que empiezo a escribir añado 40 espacios, los cuenta como 40 caracteres y 40 palabras.
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 28/10/2014 a las 00:06
  #14 (permalink)  
Antiguo 28/10/2014, 06:09
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

veamos si es esto lo que pretendes
Cita:
function mostrar() {
//cogemos el texto del textarea
var texto = document.getElementById("area").value;

if (texto.match(/\b[\da-z\xc0-\xff]+\b/gi) == null) return;

var caracteres = 0;

var arr = texto.match(/\b[\da-z\xc0-\xff]+\b/gi);

for (i in arr) {

caracteres += arr[i].length;
}

document.getElementById("carac").innerHTML = caracteres + (arr.length-1);
document.getElementById("palabras").innerHTML = arr.length;

}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #15 (permalink)  
Antiguo 28/10/2014, 06:22
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

@IsaBelM, perfectisimamente perfecto. Y cumple con las excepciones que mencioné anteriormente.

Si no es mucho pedir, te importaría explicarme el código paso a paso ? de esa manera lo entenderé mejor y puede que se me queden memorizados algunos factores que me servirán seguro para otro momento.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #16 (permalink)  
Antiguo 28/10/2014, 06:51
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

usamos el método match que lo que hace comparar una cadena con una expresión regula. si no encuentra coincidencia retorna "null". de ahí esta primera condicional

if (texto.match(/\b[\da-z\xc0-\xff]+\b/gi) == null) return;

var caracteres = 0;

como usamos el flag "g" el método retornará un array del tipo ['aaa', 'bbb', 'ccccc']

var arr = texto.match(/\b[\da-z\xc0-\xff]+\b/gi);

recorremos el array para obtener el largo de cada elemento. si segimos con el array de ejemplo, retornaría 3,3,5

for (i in arr) {

al ser valores númericos el signo "+" no concatena, sino que suma

caracteres += arr[i].length;
}

ya tenemos el número total de caracteres sin los espacios en blanco

ahora, a este total le sumamos el largo del array. si continuamos tomando el array de ejemplo, el resultado es 3. le restamos 1 porque el último elemento ['ccccc'] no puede llevar espacio al final

document.getElementById("carac").innerHTML = caracteres + (arr.length-1);

aquí simplemente obtenemos el largo del array que a su vez equivale al número de palabras escritas

document.getElementById("palabras").innerHTML = arr.length;
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #17 (permalink)  
Antiguo 28/10/2014, 10:17
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Muchísimas gracias, buscaré ahora como intentar calcular el número de líneas, palabras únicas, palabras <= 4 caracteres y palabras > 4 caracteres, si no consigo hacerlo o si lo hago pero con errores, volveré a acudir a este hilo.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #18 (permalink)  
Antiguo 28/10/2014, 13:08
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Aprovecho este hilo de nuevo ya que todo va enfocado a lo que se recoge de un textarea:

ahora mismo tengo este código con el cual intento mostrar una lista de las palabras más repetidas del texto:

Código Javascript:
Ver original
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2.     <head>
  3.     <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  4.     <script type="text/javascript">
  5.     Array.prototype.EliminarRepetidos = function () {
  6.     var arr_limpio = [];
  7.     var val_eliminados = [];
  8.     var cantidad = {};
  9.         for(var i = 0; i < this.length; i++){
  10.             if(!(this[i] in cantidad)) {
  11.                 cantidad[this[i]] = 0;
  12.                 arr_limpio.push(this[i]);
  13.                 cantidad[this[i]]++;
  14.             } else {
  15.                 val_eliminados.push(this[i]);
  16.                 cantidad[this[i]]++;
  17.             }
  18.         }
  19.      
  20.     var repeticiones = "";
  21.         for (j=0; j < arr_limpio.length; j++) {
  22.             repeticiones += arr_limpio[j] + ": " + parseInt(cantidad[arr_limpio[j]]) + "<br/>";
  23.             document.getElementById("espacio").innerHTML = repeticiones;
  24.         }
  25.        
  26.     }
  27.      
  28.      
  29.     function ContarRepetidos(valores) {
  30.     var val = valores;
  31.     array = val.split(' ');
  32.     obj = array.EliminarRepetidos();
  33.     }
  34.  
  35.     </script>
  36.     </head>
  37.     <body>
  38.     <h1>Elementos repetidos..</h1>
  39.     <textarea id="area"></textarea>
  40.     <input type="button" value="ver" onclick="ContarRepetidos('hola hola hola adios adios adios tal tal pepe');" />
  41.     <div id="espacio"></div>
  42.     </body>
  43.     </html>

Muestra la lista correctamente pero del valor que le paso directamente a la función, me gustaría que el texto el cual tiene que contar lo pille directamente del value del textarea. Y que si es posible solamente muestre los 15 primeros valores ( es decir las 15 palabras que más se repiten )

No creo que cueste mucho pero la verdad es que estoy saturado y por mas que mire no hago nada conciso y que funcione. Un saludo y mil gracias de nuevo
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #19 (permalink)  
Antiguo 28/10/2014, 16:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

a parte de
Cita:
Iniciado por rodrypaladin Ver Mensaje
me gustaría que el texto el cual tiene que contar lo pille directamente del value del textarea. Y que si es posible solamente muestre los 15 primeros valores ( es decir las 15 palabras que más se repiten )
puedes hacer que se muestren en orden ascendente o descendente por el número de repeticiones
Código:
    Array.prototype.EliminarRepetidos = function () {
var ordenar = [];
    var arr_limpio = [];
    var cantidad = {};
        for(var i = 0; i < this.length; i++){
            if(!(this[i] in cantidad)) {
                cantidad[this[i]] = 0;
                arr_limpio.push(this[i]);
                cantidad[this[i]]++;
            } else {
                cantidad[this[i]]++;
            }
        }
     


        for (j=0; j < arr_limpio.length; j++) {

            var obj = new Object();
            obj.palabra = arr_limpio[j];
            obj.repeticion = cantidad[arr_limpio[j]];

            ordenar.push(obj);
        }


        ordenar.sort(function (a, b) {

            if (a.repeticion > b.repeticion) {
                 return 1;
            }

            if (a.repeticion < b.repeticion) {
                 return -1;
            }

            return 0;
        });


var repeticiones = "";
    if (ordenar.length > 3) var max = 3; // SE MOSTRARÁN LAS 3 PRIMERAS
        for (x=0; x< max; x++) {

            repeticiones += ordenar[x].palabra + ": " + ordenar[x].repeticion + "<br/>";
            
            document.getElementById("espacio").innerHTML = repeticiones;
        }
        
    }
     
     
    function ContarRepetidos() {
    var val = document.getElementById("area").value;
    array = val.split(' ');
    obj = array.EliminarRepetidos();
    }
 
    </script>
    </head>
    <body>
    <h1>Elementos repetidos..</h1>
    <textarea id="area">hola hola hola adios adios adios tal tal pepe</textarea>
    <input type="button" value="ver" onclick="ContarRepetidos();" />
    <div id="espacio"></div>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #20 (permalink)  
Antiguo 28/10/2014, 16:26
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Lo he comprobado com el movil y funciona aunque s
Muestra 3 resultados, y aunque cambie a otro numero como por ejemplo 10 los dos datos, en ese caso no muestra nada. Tendré que mirar para que muestre primero los mas repetidos y despues que vaya bajando.
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #21 (permalink)  
Antiguo 28/10/2014, 16:43
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

el segundo de los aunque, se solventa cambiando
Cita:
return -1; por return 1
y viceversa

por otro lado, no muestra nada cuando quieres mostrar 10 palabras, por que da error. el array no se rellena con 10 elementos, al menos en ejemplo que pusistes. la solución es esta
Cita:
if (ordenar.length > 3) {var max = 3; } else { var max = ordenar.length;}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #22 (permalink)  
Antiguo 29/10/2014, 08:35
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Funciona a la perfección @IsaBelM. respecto al tema por el que se abrió el hilo...

gracias a tu ayuda con esta función calculo el número de lineas escritas
Código Javascript:
Ver original
  1. function mostrarFilas() {
  2.     var filas = document.getElementById("output").value.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1;
  3.     document.getElementById("oraciones").innerHTML = filas;
  4.     }

pero si directamente pego un texto de por ejemplo 9 filas al textarea, estas 0 no aparecen en el resultado, y si una vez pego las 9 lineas luego sigo escribiendo, las empieza a contar desde 0

¿ como podría contabilizar también el texto que se pegue directamente ? ya que prácticamente todos los usuarios lo harán así

Un saludo y mil gracias de nuevo
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #23 (permalink)  
Antiguo 29/10/2014, 14:14
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

entiendo que te refieres a pegar con el ratón. para ello hay que usar el evento paste y un temporizador
Cita:
<script type="text/javascript">
function init(este) {
este.addEventListener('keyup', function() {mostrarFilas(this)}, false);
este.addEventListener('paste', function() {copypasteRaton(this)}, false);
}


function copypasteRaton(este) {

setTimeout(function() {mostrarFilas(este)}, 0);
}


function mostrarFilas(este) {
console.log(este.value.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1);
}


document.addEventListener('DOMContentLoaded', function() {init(document.getElementById("area"))}, false);
</script>
</head>
<body>
<h1>Elementos repetidos..</h1>
<textarea id="area"></textarea>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #24 (permalink)  
Antiguo 30/10/2014, 07:00
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Que parámetro tengo que pasarle como "este" ??
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #25 (permalink)  
Antiguo 30/10/2014, 07:41
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

"este" equivale a document.getElementById("area"). quizás lo que te lia es que he usado el registrador de eventos (addEventListener)
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #26 (permalink)  
Antiguo 30/10/2014, 09:36
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

Si, la verdad es que me lía bastante, no entiendo un pijo xD se puede simplificar aunque tenga que llamar el evento en en el codigo html ? Aunque así funcione prefiero entenderlo mejor hasta que consiga entender esta forma
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #27 (permalink)  
Antiguo 30/10/2014, 14:31
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

ok, sin problema
Cita:
function copypasteRaton() {

setTimeout(mostrarFilas, 0);
}


function mostrarFilas() {
var texto = document.getElementById("area").value;
var lines = document.getElementById("lineas");

if (texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi) == null) { lines.innerHTML = 1; return; }

lines.innerHTML = texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1;
}
</script>
</head>
<body>
<h1>Elementos repetidos..</h1>
<textarea id="area" onkeyup="mostrarFilas()" onpaste="copypasteRaton()"></textarea>
<div id="lineas"></div>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #28 (permalink)  
Antiguo 30/10/2014, 17:44
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años, 7 meses
Puntos: 468
Respuesta: Contar cantidad de oraciones y parrafos en textarea

con mis ids ha quedado así

Código Javascript:
Ver original
  1. function copypasteRaton() {
  2.  
  3.     setTimeout(mostrarFilas, 0);
  4.     }
  5.  
  6.  
  7. function mostrarFilas() {
  8.     var texto = document.getElementById("output").value;
  9.     var lineas = document.getElementById("oraciones");
  10.  
  11.     if (texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi) == null) { lineas.innerHTML = 1; return; }
  12.  
  13.     lineas.innerHTML = texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1;
  14.     }

pero pasa lo mismo, al pegar no cuenta el total de las lineas, sino solamente 1, y los enventos los he puesto en el textarea por supuesto
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 30/10/2014 a las 19:48
  #29 (permalink)  
Antiguo 30/10/2014, 23:16
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: Contar cantidad de oraciones y parrafos en textarea

Hola,

Cita:
Iniciado por rodrypaladin Ver Mensaje
...
El problema surge en que si pego un texto en el text area, el usuario no ha generado ningún \n por lo cual no contabiliza ningún tipo de salto de linea.
...
Cita:
Iniciado por rodrypaladin Ver Mensaje
...
El problema surge en que si pego un texto en el text area, el usuario no ha generado ningún \n por lo cual no contabiliza ningún tipo de salto de linea.
Cita:
Iniciado por rodrypaladin Ver Mensaje
con mis ids ha quedado así

Código Javascript:
Ver original
  1. function copypasteRaton() {
  2.  
  3.     setTimeout(mostrarFilas, 0);
  4.     }
  5.  
  6.  
  7. function mostrarFilas() {
  8.     var texto = document.getElementById("output").value;
  9.     var lineas = document.getElementById("oraciones");
  10.  
  11.     if (texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi) == null) { lineas.innerHTML = 1; return; }
  12.  
  13.     lineas.innerHTML = texto.match(/(\r\n|\n|\r)[a-z0-9¿!\-\*]+/gi).length+1;
  14.     }

pero pasa lo mismo, al pegar no cuenta el total de las lineas, sino solamente 1, y los enventos los he puesto en el textarea por supuesto
No creo que las vaya a contabilizar de esa forma, el problema, como indicaste al principio es que no hay saltos de línea, el navegador los calcula conforme sea necesario para no desplegar una barra de scroll horizontal.

Por ejemplo, en el parrafo anterior en este mismo mensaje no hay ningún salto de línea, yo nunca presioné la tecla enter, y el navegador no incrustó los saltos de línea tampoco. Simplemente cada vez que tiene que desplegar un texto vuelve a calcular en base al tamaño de letra y el kerning de la fuente la cantidad de líneas.

El algoritmo para calcular eso es realmente complejo basado en la métrica de la fuente que se está usando.

Pero posiblemente, como una base podrías usar algo así:
Aunque evidentemente no es exacto y las líneas están separadas por el caracter "|" al final aunque realmente es un vector.

http://jsfiddle.net/046jtcyz/

Saludos,

ps:

Por cierto, no es
aconsejable que insertes
los saltos de línea,
porque se miraría
como este parrafo
en una pantalla donde le
cabe mas texto. --> Allá arriba quedo un montón de espacio vacío seguramente.

O sino se miraría
de esta

forma donde hay
mucho

menos espacio
que el
original. --> Las líneas se cortaron tanto en donde no cabían como donde insertaste los saltos.

Última edición por HackmanC; 30/10/2014 a las 23:29 Razón: ps
  #30 (permalink)  
Antiguo 31/10/2014, 05:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 4 meses
Puntos: 1012
Respuesta: Contar cantidad de oraciones y parrafos en textarea

que extraño. estás usando este html??
Cita:
<textarea id="output" onkeyup="mostrarFilas()" onpaste="copypasteRaton()"></textarea>
<div id="oraciones"></div>
si aún así continua sin funcionar, es que no he entendido lo que realmente pretendes
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: cantidad, parrafos, php, textarea
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 16:03.