🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
18 messages
18 total messages Started by Bypper Wed, 03 Jun 2009 06:59
¿Como cortar una expresion regular?
#311
Author: Bypper
Date: Wed, 03 Jun 2009 06:59
38 lines
2180 bytes
Buenas:

Tengo un fichero con lineas de este tipo:

"13/12/2006";"COMPRA T.C. EL CORTE 
INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"

Y algunas lineas de este tipo:

;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
;"febrero";"0"
;"marzo"
^L

etc.

bien, el caso es que las del 2� tipo las quiero desechar y procesar 
unicamente las del primero.

Esto lo estoy haciendo procesando las lineas y filtrandolas con egrep y 
una expresi�n regular, tal que as�:

| egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\";

de esta manera, extraigo unicamente las que empiezan con una fecha, como 
est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea 
como esta:

"27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

y ahi, la expresi�n regular coge los asteriscos y me muestra todos los 
ficheros del directorio actual, y mi pregunta es obvia:

�como puedo evitar que procese los caracteres que siguen a mi expresion 
regular y as� evitar este problema?

gracias,
Re: ¿Como cortar una expresion regular?
#312
Author: J.A. Gutierrez
Date: Wed, 03 Jun 2009 07:29
38 lines
2471 bytes
Bypper <bypper@microsoft.com> wrote:

: | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\";

	esto deberia ser

egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";

	(y aun se escapan algunas fechas falsas)


: de esta manera, extraigo unicamente las que empiezan con una fecha, como 
: est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea 
: como esta:

: "27/05/2008";"RECIBO ** PELAYO MUTUA 
: D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

: y ahi, la expresi�n regular coge los asteriscos y me muestra todos los 
: ficheros del directorio actual, y mi pregunta es obvia:

	?????

	Una expresion regular por si sola es algo inerte, no puede
	reemplazar asteriscos ni hacer nada.

	Tendras que mostrarnos mas detalles del codigo que estas
	haciendo; pero habitualmente los problemas de expansion de shell
	se evitan o usando adecuadamente las comillas o haciendo "set -f"
	(man sh)



-- 
PGP and other useless info at      \
http://webdiis.unizar.es/~spd/      \
finger://daphne.cps.unizar.es/spd    \       Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/          \                         (Virgilio)   
Re: ¿Como cortar una expresion regular?
#313
Author: Pascal J. Bourguignon
Date: Wed, 03 Jun 2009 07:45
69 lines
3485 bytes
Bypper <bypper@microsoft.com> writes:

> Buenas:
>
> Tengo un fichero con lineas de este tipo:
>
> "13/12/2006";"COMPRA T.C. EL CORTE
> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>
> Y algunas lineas de este tipo:
>
> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"

�Oy! �Qu� rico!  :-)


> ;"febrero";"0"
> ;"marzo"
> ^L
>
> etc.
>
> bien, el caso es que las del 2� tipo las quiero desechar y procesar
> unicamente las del primero.

Bien.  Comparemos:

"13/12/2006";"COMPRA T.C. EL CORTE INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"

"...
;...

Entonces para descartar las segundas, basta hacer:

   grep -v -e '^;' < movimientos.csv
   # o egrep -v, es igual.


> Esto lo estoy haciendo procesando las lineas y filtrandolas con egrep
> y una expresi�n regular, tal que as�:
>
> | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\";
>
> de esta manera, extraigo unicamente las que empiezan con una fecha,
> como est� en el ejemplo, hasta ahi bien, 

Vale.


> el problema es que hay alguna
> linea como esta:
>
> "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>
> y ahi, la expresi�n regular coge los asteriscos y me muestra todos los
> ficheros del directorio actual, y mi pregunta es obvia:
>
> �como puedo evitar que procese los caracteres que siguen a mi
> expresion regular y as� evitar este problema?

Si no haces tonterias, no deberia occurir.  Pero no nos muestras lo
que haces realmente, qu� comando das, asi que no podemos decir nada.

Los asteriscos son en un archivos, no hay manera si no haces algo muy
particular, para que el shell los interprete de ningun manera.

-- 
__Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
#315
Author: Bypper
Date: Wed, 03 Jun 2009 18:10
55 lines
3187 bytes
J.A. Gutierrez escribi�:
> Bypper <bypper@microsoft.com> wrote:
> 
> : | egrep ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\";
> 
> 	esto deberia ser
> 
> egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";
> 
> 	(y aun se escapan algunas fechas falsas)

ok, gracias, aunque no es ese el problema, no tengo que chequear esto

> : de esta manera, extraigo unicamente las que empiezan con una fecha, como 
> : est� en el ejemplo, hasta ahi bien, el problema es que hay alguna linea 
> : como esta:
> 
> : "27/05/2008";"RECIBO ** PELAYO MUTUA 
> : D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
> 
> : y ahi, la expresi�n regular coge los asteriscos y me muestra todos los 
> : ficheros del directorio actual, y mi pregunta es obvia:
> 
> 	?????
> 
> 	Una expresion regular por si sola es algo inerte, no puede
> 	reemplazar asteriscos ni hacer nada.
> 
> 	Tendras que mostrarnos mas detalles del codigo que estas
> 	haciendo; pero habitualmente los problemas de expansion de shell
> 	se evitan o usando adecuadamente las comillas o haciendo "set -f"
> 	(man sh)

pues lo hace (vaya si lo hace), asi que inerte lo que se dice inerte ...

esta linea, por ejemplo, que he puesto antes (lo vuelvo a poner):


"27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

es lo que el c�digo que he puesto antes interpreta extrayendo esto:

"27/05/2008";"RECIBO bbk.xls cuentas.sh PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

despues de recibo aparecen los 2 archivos que tiene el directorio 
actual, de lo cual se deduce lo que he dicho anteriormente, esta 
interpretando el/los asteriscos mostrando el contenido del directorio.

mi pregunta es simplemente como evito esto, he estado jugando con las 
comillas sin resultado, problema agravado precisamente por el hecho de 
que las lineas a procesar tambien tienen comillas.

En fin, pues eso.
Re: ¿Como cortar una expresion regular?
#314
Author: Bypper
Date: Wed, 03 Jun 2009 18:21
43 lines
2703 bytes
Pascal J. Bourguignon escribi�:
...

gracias por la respuesta Pascal, te contesto...
> 
> Entonces para descartar las segundas, basta hacer:
> 
>    grep -v -e '^;' < movimientos.csv
>    # o egrep -v, es igual.

no vale, las lineas deshechables no siempre comienzan con un ; asi que 
el unico criterio que creo que vale es filtrar por el formato de fecha 
completo que he especificado.

  >> el problema es que hay alguna
>> linea como esta:
>>
>> "27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>>
>> y ahi, la expresi�n regular coge los asteriscos y me muestra todos los
>> ficheros del directorio actual, y mi pregunta es obvia:
>>
>> �como puedo evitar que procese los caracteres que siguen a mi
>> expresion regular y as� evitar este problema?
> 
> Si no haces tonterias, no deberia occurir.  Pero no nos muestras lo
> que haces realmente, qu� comando das, asi que no podemos decir nada.

tonterias ��???

he mostrado el comando, las lineas que proceso y el resultado en el post 
original, y en la contestaci�n anterior a J.A muestro tambi�n la salida 
exacta, incluso con datos que no me gustar�a mostrar pero bueno, as� 
pensaba evitar este tipo de respuestas (sin resultado por lo que veo)

> Los asteriscos son en un archivos, no hay manera si no haces algo muy
> particular, para que el shell los interprete de ningun manera.

bien, pues espero haberte demostrado que no es asi

me remito a la respuesta a J.A. para mas detalles.

Gracias de nuevo.
Re: ¿Como cortar una expresion regular?
#316
Author: Oscar Garcia
Date: Wed, 03 Jun 2009 19:20
56 lines
3533 bytes
Bypper escribi�:
> pues lo hace (vaya si lo hace), asi que inerte lo que se dice inerte ...
> esta linea, por ejemplo, que he puesto antes (lo vuelvo a poner):
> "27/05/2008";"RECIBO ** PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
> 
> es lo que el c�digo que he puesto antes interpreta extrayendo esto:
> 
> "27/05/2008";"RECIBO bbk.xls cuentas.sh PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

Hola Bypper. Voy a responderte en este post y luego hablar� contigo un 
poco m�s serio en el post del otro compa�ero que ha querido ayudarte.

He intentado reproducir el problema que comentas y tal y como todos 
esperamos no se producen los efectos que t� nos indicas:

redstar@anibal:~/pr$ cat datos.txt
"13/12/2006";"COMPRA T.C. EL CORTE 
INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
;"febrero";"0"
;"marzo"
"27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

redstar@anibal:~/pr$ egrep 
^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt
"13/12/2006";"COMPRA T.C. EL CORTE 
INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
"27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"

�A qu� se debe? A que JAM�S se interpretan los datos de un archivo si no 
se desea expresamente.

Sin embargo si a�ades datos en el archivo de esta manera:
redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt

Puedes correr el peligro de que se interpreten los datos. En el caso que 
te he puesto no ser� as�, pero si cometes el error de hacer:
redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA 
D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt

Lo que se agregar� es lo que t� dices, los archivos del directorio 
actual en sustituci�n de "**".

Ahora te veo en el siguiente post...

Un saludo y suerte.


-- 
�scar Javier Garc�a Baudet
LinaresDigital
Re: ¿Como cortar una expresion regular?
#317
Author: Oscar Garcia
Date: Wed, 03 Jun 2009 19:30
57 lines
3854 bytes
Bypper escribi�:
> Pascal J. Bourguignon escribi�:
>>> �como puedo evitar que procese los caracteres que siguen a mi
>>> expresion regular y as� evitar este problema?
>>
>> Si no haces tonterias, no deberia occurir.  Pero no nos muestras lo
>> que haces realmente, qu� comando das, asi que no podemos decir nada.
> 
> tonterias ��???
> he mostrado el comando, las lineas que proceso y el resultado en el post 
> original, y en la contestaci�n anterior a J.A muestro tambi�n la salida 
> exacta, incluso con datos que no me gustar�a mostrar pero bueno, as� 
> pensaba evitar este tipo de respuestas (sin resultado por lo que veo)

Te remito a los consejos para un mejor uso de las news que se env�an 
peri�dicamente a los grupos ecol.* para hacerte un comentario:
   5.8 Del mismo modo, si observa que la respuesta que se le ha dado a
       alguien es incorrecta o incompleta, no arremeta contra quien la
       envi�.

    Lo �nico que tiene que hacer es limitarse a enviar usted su
    respuesta, en el modo que piensa que s� es correcto. Recuerde que
    nadie deja nunca de aprender y que todos le agradecer�n su
    contribuci�n.

Ante todo recuerda que si alguien que intenta ayudarte te dice algo te 
lo dice por alg�n motivo, y no por simplemente decirlo.

Si Pascal dice que necesita m�s ejemplos REALES para reproducir tu error 
es por alg�n motivo. Yo tambi�n pienso como �l. Piensa que nos cuesta un 
esfuerzo extra intentar hacer que el programa falle como te falla a ti 
que hacer funcionar bien el programa.

>> Los asteriscos son en un archivos, no hay manera si no haces algo muy
>> particular, para que el shell los interprete de ningun manera.
> 
> bien, pues espero haberte demostrado que no es asi
> me remito a la respuesta a J.A. para mas detalles.

Pues parece ser que no, porque en ning�n momento has puesto c�digo 
exacto que genere el error que nos comentas. He tenido que deducirlo yo 
y es una posible forma de equivocarse, probablemente la que has tenido 
t� sea diferente.

> Gracias de nuevo.

De nada.

Si nos mandas el c�digo exacto con el que te ocurren esos problemas 
podremos ayudarte mejor a corregirte malos h�bitos e incluso decirte 
d�nde te est�s equivocando para que no cometas errores futuros.

Un saludo y suerte.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
Re: ¿Como cortar una expresion regular?
#318
Author: Jos� Luis P�rez Diez
Date: Thu, 04 Jun 2009 13:00
20 lines
2434 bytes
In article <hirif6-6oi.ln1@apevia.bersol.sytes.net>, Bypper wrote:
> tonterias ��???

 Y gordas 
 
> he mostrado el comando, las lineas que proceso y el resultado en el post 
> original, y en la contestaci�n anterior a J.A muestro tambi�n la salida 
> exacta, incluso con datos que no me gustar�a mostrar pero bueno, as� 
> pensaba evitar este tipo de respuestas (sin resultado por lo que veo)
>

Porque no posteas lo que le llega al grep por que en realidad no has mostrado nada yo pruebo en dos maquinas diferentes un arm y ix86 lo que dices que te da problemas y nada el problema es que lo que le llega al grep no es lo que tu crees que le llega mira pruebalo ejecuando lo siguente.
(Todo en una linea)

echo '"27/05/2008";"RECIBO ** PELAYO MUTUA D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"'| egrep \"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\";



--
Los programadores esta ocupados intendtado mejorar los programas a prueba de idiotas. Mientras tanto el universo  intenta mejorar los idiotas. El universo va ganando
[OFF-Topic]: Re: ¿Como cortar una expresion regular?
#320
Author: Bypper
Date: Thu, 04 Jun 2009 19:45
42 lines
3328 bytes
Oscar Garcia escribi�:
...
>>> Si no haces tonterias, no deberia occurir.  Pero no nos muestras lo
>>> que haces realmente, qu� comando das, asi que no podemos decir nada.
>>
>> tonterias ��???
>> he mostrado el comando, las lineas que proceso y el resultado en el 
>> post original, y en la contestaci�n anterior a J.A muestro tambi�n la 
>> salida exacta, incluso con datos que no me gustar�a mostrar pero 
>> bueno, as� pensaba evitar este tipo de respuestas (sin resultado por 
>> lo que veo)
> 
> Te remito a los consejos para un mejor uso de las news que se env�an 
> peri�dicamente a los grupos ecol.* para hacerte un comentario:
>   5.8 Del mismo modo, si observa que la respuesta que se le ha dado a
>       alguien es incorrecta o incompleta, no arremeta contra quien la
>       envi�.
> 
>    Lo �nico que tiene que hacer es limitarse a enviar usted su
>    respuesta, en el modo que piensa que s� es correcto. Recuerde que
>    nadie deja nunca de aprender y que todos le agradecer�n su
>    contribuci�n.
> 
> Ante todo recuerda que si alguien que intenta ayudarte te dice algo te 
> lo dice por alg�n motivo, y no por simplemente decirlo.
> 
> Si Pascal dice que necesita m�s ejemplos REALES para reproducir tu error 
> es por alg�n motivo. Yo tambi�n pienso como �l. Piensa que nos cuesta un 
> esfuerzo extra intentar hacer que el programa falle como te falla a ti 
> que hacer funcionar bien el programa.

Gracias Oscar, lo primero pido disculpas he ofendido a alguien desde ahora.

Como justificaci�n decir que conozco las normas de nettiqueta y entiendo 
que deben aplicarse a todos, tanto el que pregunta como el que responde.

Si se repasan mis respuestas, no creo haber faltado al respeto a nadie, 
si acaso mi tono ha sido un tanto despectivo, tal y como he interpretado 
que se ha sido conmigo.

No he omitido nada de forma voluntaria sino porque me ha parecido que no 
era trascendente, corrijo el error.
Re: ¿Como cortar una expresion regular?
#319
Author: Bypper
Date: Thu, 04 Jun 2009 19:45
47 lines
3199 bytes
Hola Oscar, gracias por tu respuesta y cortesia, te contesto m�s 
adelante ...
Oscar Garcia escribi�:
...
> He intentado reproducir el problema que comentas y tal y como todos 
> esperamos no se producen los efectos que t� nos indicas:
> 
> redstar@anibal:~/pr$ cat datos.txt
> "13/12/2006";"COMPRA T.C. EL CORTE 
> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
> ;"febrero";"0"
> ;"marzo"
> "27/05/2008";"RECIBO ** PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
> 
> redstar@anibal:~/pr$ egrep 
> ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt
> "13/12/2006";"COMPRA T.C. EL CORTE 
> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
> "27/05/2008";"RECIBO ** PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
> 
> �A qu� se debe? A que JAM�S se interpretan los datos de un archivo si no 
> se desea expresamente.
> 
> Sin embargo si a�ades datos en el archivo de esta manera:
> redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt
> 
> Puedes correr el peligro de que se interpreten los datos. En el caso que 
> te he puesto no ser� as�, pero si cometes el error de hacer:
> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA 
> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt
> 
> Lo que se agregar� es lo que t� dices, los archivos del directorio 
> actual en sustituci�n de "**".

El c�digo completo es el siguiente:

xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L
do
    echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";
done

jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo, se 
interpreta como he descrito. Soy incapaz de ver el matiz que lo diferencia.
Re: ¿Como cortar una expresion regular?
#355
Author: Bypper
Date: Thu, 04 Jun 2009 19:52
27 lines
2328 bytes
Bypper escribi�:
...
>> Puedes correr el peligro de que se interpreten los datos. En el caso 
>> que te he puesto no ser� as�, pero si cometes el error de hacer:
>> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA 
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt
>>
>> Lo que se agregar� es lo que t� dices, los archivos del directorio 
>> actual en sustituci�n de "**".
> 
> El c�digo completo es el siguiente:
> 
> xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L
> do
>    echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";
> done
> 
> jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo, se 
> interpreta como he descrito. Soy incapaz de ver el matiz que lo diferencia.

vale, ahora lo veo:

echo "$L" | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";

las comillas dobles sobre la propia variable solucionan el problema.

Gracias a todos.
Re: ¿Como cortar una expresion regular?
#357
Author: Pascal J. Bourguignon
Date: Thu, 04 Jun 2009 23:52
79 lines
4701 bytes
Bypper <bypper@microsoft.com> writes:

> Hola Oscar, gracias por tu respuesta y cortesia, te contesto m�s
> adelante ...
> Oscar Garcia escribi�:
> ...
>> He intentado reproducir el problema que comentas y tal y como todos
>> esperamos no se producen los efectos que t� nos indicas:
>> redstar@anibal:~/pr$ cat datos.txt
>> "13/12/2006";"COMPRA T.C. EL CORTE
>> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
>> ;"febrero";"0"
>> ;"marzo"
>> "27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>> redstar@anibal:~/pr$ egrep
>> ^\"[0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\" datos.txt
>> "13/12/2006";"COMPRA T.C. EL CORTE
>> INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>> "27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"
>> �A qu� se debe? A que JAM�S se interpretan los datos de un archivo
>> si no se desea expresamente.
>> Sin embargo si a�ades datos en el archivo de esta manera:
>> redstar@anibal:~/pr$ echo '"27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"' >> datos.txt
>> Puedes correr el peligro de que se interpreten los datos. En el caso
>> que te he puesto no ser� as�, pero si cometes el error de hacer:
>> redstar@anibal:~/pr$ echo ""27/05/2008";"RECIBO ** PELAYO MUTUA
>> D";"27/05/2008";"-345.48";"608.96";;;;"0";"-345.48"" >> datos.txt
>> Lo que se agregar� es lo que t� dices, los archivos del directorio
>> actual en sustituci�n de "**".
>
> El c�digo completo es el siguiente:

�Mejor!

> xls2csv -c';'-g2 $FILE | grep -v ^$ | while read L
> do
>    echo $L | egrep ^\"[0-3][0-9]\/[0-1][0-9]\/[1-2][0-9][0-9][0-9]\";

Aqu�      ^^  tienes el problema.

Cuando usas variables en el shell, deberias siempre poner las entre "

    echo "$L" 

Igualmente, [0-3] es una expression interpretada por el shell. Tienes
suerte con una regex tan complicada que las probabilidad de tener un
archivo correspondiente sera baja, pero con una mas simple, podrias
tambien tener el problema a este nivel.  Nota que el ; que tienes, es
interpretado por el shell como separador de comando, no como parte del
argumento a egrep.  Asi que es mejor poner argumentos fijos (sin
variables) entre '

             | egrep '^"[0-3][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]";'

> done
>
> jurar�a que es pr�cticamente lo mismo que has puesto tu, sin embargo,
> se interpreta como he descrito. Soy incapaz de ver el matiz que lo
> diferencia.

El matiz es que no hay razon para usar un bucle while aqu�.  Todos
hemos pensado que hacias mas bien algo asi:

  xls2csv -c';'-g2 "$FILE" | grep -e '^"[0-3][0-9]/[0-1][0-9]/[1-2][0-9][0-9][0-9]";'

                   ^     ^ siempre poner los "

No es raro en sistemas como MacOSX u otros unix usados con un GUI,
tener espacios y otros caracterios especiales en nombres de archivos y
directorios.



-- 
__Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
#358
Author: Alias
Date: Fri, 05 Jun 2009 19:41
3 lines
1473 bytes
Realmente, o yo no lo estoy entendiento o algo pasa...
¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o
^ ???
Re: ¿Como cortar una expresion regular?
#360
Author: Pascal J. Bourguignon
Date: Fri, 05 Jun 2009 19:51
11 lines
2124 bytes
Alias <jcarmena@gmail.com> writes:

> Realmente, o yo no lo estoy entendiento o algo pasa...
> ���Las l�neas que quieres desechar no son las que empiezan por ; o
> ^ ???

No hay l�neas empiezando por '^' ; '^' es un caracterio especial por
las regexp que significa el principio de la l�nea.

-- 
__Pascal Bourguignon__
Re: ¿Como cortar una expresion regular?
#361
Author: Alias
Date: Fri, 05 Jun 2009 20:22
22 lines
2103 bytes
On 5 jun, 21:51, p...@informatimago.com (Pascal J. Bourguignon) wrote:
> Alias <jcarm...@gmail.com> writes:
> > Realmente, o yo no lo estoy entendiento o algo pasa...
> > ¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o
> > ^ ???
>
> No hay líneas empiezando por '^' ; '^' es un caracterio especial por
> las regexp que significa el principio de la línea.
>
> --
> __Pascal Bourguignon__

Bypper dijo que quería desechar las líneas de este tipo:

;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
;"febrero";"0"
;"marzo"
^L

(copiado tal cual)
yo lo estoy viendo muy claramente, comienzan por ;
Re: ¿Como cortar una expresion regular?
#362
Author: Alias
Date: Fri, 05 Jun 2009 20:26
33 lines
2451 bytes
On 5 jun, 22:22, Alias <jcarm...@gmail.com> wrote:
> On 5 jun, 21:51, p...@informatimago.com (Pascal J. Bourguignon) wrote:
>
> > Alias <jcarm...@gmail.com> writes:
> > > Realmente, o yo no lo estoy entendiento o algo pasa...
> > > ¿¿¿Las líneas que quieres desechar no son las que empiezan por ; o
> > > ^ ???
>
> > No hay líneas empiezando por '^' ; '^' es un caracterio especial por
> > las regexp que significa el principio de la línea.
>
> > --
> > __Pascal Bourguignon__
>
> Bypper dijo que quería desechar las líneas de este tipo:
>
> ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
> ;"febrero";"0"
> ;"marzo"
> ^L
>
> (copiado tal cual)
> yo lo estoy viendo muy claramente, comienzan por ;


Pero es igual:

Si las que quiere desechar comienzan con ; y ^ sería:
        | egrep '^[^;^]'

Si no, se ve claramente que las que quiere desechar no tienen /
        | egrep '/'
Re: ¿Como cortar una expresion regular?
#363
Author: Oscar Garcia
Date: Fri, 05 Jun 2009 21:31
43 lines
3249 bytes
Alias escribi�:
> Pero es igual:
> Si las que quiere desechar comienzan con ; y ^ ser�a:
>         | egrep '^[^;^]'
> Si no, se ve claramente que las que quiere desechar no tienen /
>         | egrep '/'

Entonces dejar� pasar una l�nea del estilo:
;"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23"

Por ponerte un ejemplo.

 > Tengo un fichero con lineas de este tipo:
 > "13/12/2006";"COMPRA T.C. EL CORTE
 > INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
 > Y algunas lineas de este tipo:
 > ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
 > ;"febrero";"0"
 > ;"marzo"
 > etc.
 > bien, el caso es que las del 2� tipo las quiero desechar y procesar
 > unicamente las del primero.

Como bien dices �l ped�a filtrar el segundo tipo de l�neas, pero viendo 
los ejemplos se ve claro que lo que realmente busca es filtrar aquellas 
que tienen como primer campo una fecha con su estructura (dos d�gitos de 
d�a, mes y cuatro de a�o).

Imagina que alg�n programa o aplicaci�n en vez de dejar en blanco el 
campo lo rellena con una cadena vac�a o con un espacio en blanco si no 
elimina espacios sobrantes a la derecha y/o izquierda del lugar de donde 
obtiene ese dato (el teclado por ejemplo):
" ";"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23"

Tambi�n pasar�a como correcta eliminando todo lo que empiece por ;.

Yo creo que ha optado bien por filtrar por el formato de fecha.

Un saludo.

-- 
�scar Javier Garc�a Baudet
LinaresDigital
Re: ¿Como cortar una expresion regular?
#364
Author: Alias
Date: Fri, 05 Jun 2009 21:55
55 lines
3720 bytes
On 5 jun, 23:31, Oscar Garcia <redstarQUITARSPA...@terra.es> wrote:
> Alias escribió:
>
> > Pero es igual:
> > Si las que quiere desechar comienzan con ; y ^ sería:
> >         | egrep '^[^;^]'
> > Si no, se ve claramente que las que quiere desechar no tienen /
> >         | egrep '/'
>
> Entonces dejará pasar una línea del estilo:
> ;"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23"
>
> Por ponerte un ejemplo.
>
>  > Tengo un fichero con lineas de este tipo:
>  > "13/12/2006";"COMPRA T.C. EL CORTE
>  > INGLES";"13/12/2006";"-37";"1.2e+03";"-6.2e+03";"2e+05";;"0";"-37"
>  > Y algunas lineas de este tipo:
>  > ;"febrero";"2811.5";"-4155.07";"-1343.57";"831.229999999999"
>  > ;"febrero";"0"
>  > ;"marzo"
>  > etc.
>  > bien, el caso es que las del 2º tipo las quiero desechar y procesar
>  > unicamente las del primero.
>
> Como bien dices él pedía filtrar el segundo tipo de líneas, pero viendo
> los ejemplos se ve claro que lo que realmente busca es filtrar aquellas
> que tienen como primer campo una fecha con su estructura (dos dígitos de
> día, mes y cuatro de año).
>
> Imagina que algún programa o aplicación en vez de dejar en blanco el
> campo lo rellena con una cadena vacía o con un espacio en blanco si no
> elimina espacios sobrantes a la derecha y/o izquierda del lugar de donde
> obtiene ese dato (el teclado por ejemplo):
> " ";"Chaleco negro/gris";"21.5";"-415.07";"-1343.57";"831.23"
>
> También pasaría como correcta eliminando todo lo que empiece por ;.
>
> Yo creo que ha optado bien por filtrar por el formato de fecha.
>
> Un saludo.
>
> --
> Óscar Javier García Baudet
> LinaresDigital


Hombre, yo me atengo a lo que él ha puesto: 2 tipos de líneas, hay que
ser prácticos y se ve claramente que lo de las segundas líneas no son
chalecos, sino meses :P

jeje, pero bueno, se cura en salud. Saludos.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads