[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Re: Contar caracteres en tiempo real



2010/11/13 Marc Aymerich <glicerinu@gmail.com>:
> 2010/11/13 rantis cares <rantiscares@gmail.com>:
>> El día 13 de noviembre de 2010 15:35, Marc Aymerich
>> <glicerinu@gmail.com> escribió:
>>> 010/11/13 rantis cares <rantiscares@gmail.com>:
>>>> El día 13 de noviembre de 2010 13:03, rantis cares
>>>> <rantiscares@gmail.com> escribió:
>>>>> El día 13 de noviembre de 2010 12:49, Camaleón <noelamac@gmail.com> escribió:
>>>>>> El Sat, 13 Nov 2010 11:54:27 -0600, rantis cares escribió:
>>>>>>
>>>>>> Te lo marco como OT para que no se nos enfaden...
>>>>>
>>>>> ¿Que es eso de que me lo marques como OT para que no se enfaden?
>>>>>
>>>>>>
>>>>>>> Quiero contar el numero de caracteres mediante un script en bash pero
>>>>>>> cada vez que ingrese un caracter, que lo vaya contando en tiempo real.
>>>>>>> El comando wc lo hace, pero cuando existe un archivo y no es en tiempo
>>>>>>> real.
>>>>>>>
>>>>>>> yo quiero hacer algo así:
>>>>>>>
>>>>>>> #!/bin/bash
>>>>>>>
>>>>>>> echo "Contare los caracteres como los vas ingresando"
>>>>>>> read -p "Contador: "
>>>>>>
>>>>>> Sí, con wc... ¿por qué no?
>>>>>>
>>>>>> #!/bin/bash
>>>>>>
>>>>>> echo "Contare los caracteres como los vas ingresando"
>>>>>> echo "Contador: "
>>>>>> read conta
>>>>>> echo -n $conta | wc -m
>>>>>>
>>>>>> Sólo te queda pulirlo un poco para que admita la introducción de retornos
>>>>>> de carro y añadir el factor "tiempo real" (quizá debas tirar de ncurses
>>>>>> para pintar una pantalla con dos campos, uno para la introducción de
>>>>>> datos y otro que vaya mostrando el contenido del contador) ;-P
>>>>>
>>>>> Me gusto un poco, la verdad es que yo quisiera que lo mostrara en
>>>>> tiempo real. La verdad es que no estoy usando ncurses, me gustaria
>>>>> todo muy sencillo, en bash.
>>>>>
>>>>> Claro que no voy a escribir muchos caracteres, pero si creo que hare
>>>>> un pequeño bucle para conseguir lo que quiero y algunas condiciones
>>>>> como
>>>>>
>>>>> maximo=(igual o menor que)50
>>>>>
>>>>>
>>>>>
>>>>> if $texto cumple esta condicion $maximo
>>>>> entonces que ejecute la accion
>>>>> finaliza
>>>>>
>>>>> sino
>>>>> entonces que se repita el ingreso del texto
>>>>>
>>>>> Gracias
>>>>>
>>>>> P.D. Yo no sabia que no eras Camaleón, sino que eres Camaleona :D
>>>>>
>>>>
>>>> Bien he realizado el script para contar los caracteres, tal vez no en
>>>> tiempo real, pero para pequeños ingresos de texto que funcionen.
>>>>
>>>> Si alguno tiene una mejor idea, o alguna sugerencia que pudiera hacer
>>>> que se viera en tiempo real, se los agradecere.
>>>>
>>>
>>> #!/bin/bash
>>> while read -n1 c; do
>>> a="$a$c"
>>> echo -en "\r$a   "$(($(echo $a|wc -c) -1));
>>> done
>>>
>>
>> Marc:
>>
>> Cuando copie el codigo y vi los resultados, la verdad es que me gusto
>> la manera de resolver este problema, me parecio genial, de hecho me
>> puse a reir por la genialidad de la respuesta.
>>
>> Solo que al estar aprendiendo, no se que tanto sigjifica esto, pero
>> funciona a medias, te diré porque:
>>
>> 1. No me acepta los espacios, tengo que poner la barra inversa \ y
>> posteriormente tengo que presionar la barra espaciadora.
>> 2. Si me equivoco, no puedo borrar y ademas cada que presiono la tecla
>> delete, me lo cuenta como un caracter.
>> 3. Cuando llega al final de la pantalla, vuelve a escribir todo y
>> dicha pantalla se llena del mismo mensaje cada vez que escribo un
>> nuevo caracter hasta que termina pareciendose una piramide.
>>
>> Decir esto, no significa que no valore el script, quisiera yo tener el
>> conocimiento para desarrollar la genialidad con la que contaste los
>> caracteres.
>>
>> Agradeceria si me ayudaras a resolver estos "inconvenientes", y aun si
>> no lo hicieras, creo que ya hiciste mucho, en lo que a mi corresponde
>> me pondre a investigar porque me has mostrado el camino para llegar a
>> donde quiero llegar.
>>
>> Gracias
>>
>> P.D. Acepto mas sugerencias
>>
>
> rantis, para el espacio puedes solucionarlo así:
>
> while IFS= read -r -n1 c; do
> ....
>
> Para finalizar cuando pulsas enter tendrías que poner algo parecido a
> esto al principio del bucle:
> if [ "$c" == "$(echo)" ]; then break; fi
>
>
> Hasta aquí y sumando las mejoras de javier :) tendriamos esto:
>
> while IFS= read -r -n1 c; do
> if [ "$c" == "$(echo)" ]; then break; fi
> a="$a$c"
> echo -en "\r$a   "$(($(echo $a|wc -c) -1));
> done

uhy,  sumando las mejoras que ha comentado javier seria así :) sorry

while IFS= read -r -n1 c; do
if [ "$c" == "$(echo)" ]; then break; fi
a="$a$c"
echo -en "\r$a   ${#a}"
done


-- 
Marc


Reply to: