El día 13 de noviembre de 2010 16:37, Marc Aymerich
<glicer...@gmail.com> escribió:
> 2010/11/13 rantis cares <rantisca...@gmail.com>:
>> El día 13 de noviembre de 2010 15:35, Marc Aymerich
>> <glicer...@gmail.com> escribió:
>>> 010/11/13 rantis cares <rantisca...@gmail.com>:
>>>> El día 13 de noviembre de 2010 13:03, rantis cares
>>>> <rantisca...@gmail.com> escribió:
>>>>> El día 13 de noviembre de 2010 12:49, Camaleón <noela...@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
>

Como lo comente anteriormente, se esta resolviendo el problema y cada
vez la solucion esta mas cerca. Ahora con esta mejora la barra
espaciadora ya es reconocida, ahora solo falta el borrado, que ya lo
comence a estudiar y ademas la repeticion de todo el texto cuando
llega al final y se vuelve a escribir una y otra vez.

> Y Ahora para borrar tendrías que usar algo parecido a esto:
>
> if [ "$c" == "$(echo backspace)" ]; then a={$a%?}; fi
>
> Desgraciadamente esto ultimo no te va a funcionar, No se como hacer un
> echo del carácter backspace !! :D  Pero si logras comparar $c con
> backspace ahí lo tienes :) .
>

Esto es mucho mas sencillo que cuando comence, la respuesta esta
cerca, la puedo oler, puedo ver funcionando este script cuenta
caracteres jejeje.


--
To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/aanlktinm1xmmtftj1a-qnvknvi7dz_7evwqajxyyv...@mail.gmail.com

Responder a