Iniciar sesión

Ver la versión completa : Script para eliminación selectiva de un texto



Danielo515
13/03/2011, 20:07
Hola famigos, estoy super liado con un proyecto que se supone era para ahorrarme tiempo en el día de hoy, así que si alguien puede ayudarme, yo, le beso los pies.

Tengo un documento de texto hasta arriba de preguntas de las que quiero eliminar las que no valen es decir


pregunta 82
bla bla ball balblabl albalb aba balba

a.
Bli bli
b.
Ble ble
c.blu blu

respuesta c

Pues me gustaría dejar todo menos las respuestas b y c.

¿Una ayudita porfi? es que con lo de las expresiones de texto regulares y formateo de cadenas y tal soy un manta.

JoJo_ReloadeD
13/03/2011, 20:09
grep es tu amigo, pidele que te haga una busqueda inversa, te devuelva las lineas que justo no coincidan (las que quieres quitar) y lo tienes...

juanvvc
13/03/2011, 20:10
No le encuentro la lógica al asunto :confused:

Danielo515
13/03/2011, 21:28
Jojo, grep no me vale porque no quiero eliminar una expresión regular, quiero eliminar unas u otras en función del contenido de la ultima


a.
b.
c.

Respuesta: a

Pues quiero eliminar b y c. ¿Lo he explicado mejor así?

ChUKii
13/03/2011, 21:32
Yo eso lo haria superfacil en java. Haces una app a la que pasas tres parametros: fichero, inicio de cadena a eliminar y fichero destino.

De forma que le dices que todo lo que empiece por XXX no te lo guarde en el fichero destino.

Si no sabes como hacerlo en un ratillo te lo podría hacer y te subo el programa a algun lado ;)

:brindis::brindis:

Edito: En funcion de la ultima?... me he liado espera que releo

Edito 2: Bueno eliminas en funcion de Respuesta... coger el ultimo caracter de lo que empiece por respuesta y de lo anterior eliminas las que no sean... en java con un poco de logica se puede hacer.
Cada pregunta en un nuevo bucle.

Segata Sanshiro
13/03/2011, 21:42
Haz caso a ChUKii, o bien hazlo en php. Yo antes usaba Java para estas cosas pero me da la sensación de que en php avanzo más deprisa programando este tipo de scripts. Tampoco tengo mucha experiencia en ninguno de los dos lenguajes, pero bueno.

ChUKii
13/03/2011, 21:46
Haz caso a ChUKii, o bien hazlo en php. Yo antes usaba Java para estas cosas pero me da la sensación de que en php avanzo más deprisa programando este tipo de scripts. Tampoco tengo mucha experiencia en ninguno de los dos lenguajes, pero bueno.

Es la misma cantidad de codigo en ambos lenguajes ;) ;). Salvo que le metas algo grafico que en php al usar html es mas facil que meter swing jeje.

:brindis::brindis:

Danielo515
13/03/2011, 22:17
Si amigos, la lógica está muy clara, hasta yo la tengo clara.

Lo que no tengo tan claro es: como separar todas las preguntas y de cada pregunta eliminar las otras, mirad, os pongo una pregunta de ejemplo


QUESTION 7
.

Your company has an Active Directory domain. The main office has a DNS server named DNS1 that is configured with Active Directory-integrated DNS. The branch office has a DNS server named DNS2 that contains a secondary copy of the zone from DNS1. The two offices are connected with an unreliable WAN link.

You add a new server to the main office. Five minutes after adding the server, a user from the branch office reports that he is unable to connect to the new server. You need to ensure that the user is able to connect to the new server.

What should you do?

A.
Clear the cache on DNS2.

B.
Reload the zone on DNS1.

C.
Refresh the zone on DNS2.

D.
Export the zone from DNS1 and import the zone to DNS2.


Answer: C


Lo que hago ahora mismo (con piton)

split de todo el texto en funcion de "QUESTION"

split de cada Question en función de What should you do? (pongamos que XX)

muestro la parte 1 de XX

Cojo la respuesta de la parte dos de XX

Comparo cada línea de XX (el primer caracter) con el resultado.

En teoría funciona, pero claro, es que no corto bien el texto, porque, en XX tengo

[0]= /n/nA
[1]=B. (...)
[2]=C.

El problema son los /n/n que hay antes de la A, que los coje por como hago las separaciones.

PharaOnyx
13/03/2011, 22:23
[0]= /n/nA
[1]=B. (...)
[2]=C.

El problema son los /n/n que hay antes de la A, que los coje por como hago las separaciones.
¿Y no te los puedes cargar antes de procesar el archivo? (lo que viene siendo un $string=~s/\n\n//g de Perl)

Saludos, Alex

ChUKii
13/03/2011, 22:31
A ver, pensando en Java:

Sabes donde empieza cada pregunta por lo cual no deberias tener problema en volver a empezar a hacer lo toco cuando te llegue el siguiente "QUESTION".

Yo lo que haría sería guardar el texto completo en un String. Ahi buscar el "Answer:" y cogeria el caracter indemediatamente siguiente a ese (el C por ejemplo). Esto con un split "Answer: " y usando subString para coger el caracter 0,1 del array [1] ya tendrias "C" ;).

Despues haria un Split del String entero teniendo en cuenta los saltos de linea "\r\n".

Esto me dejaria un array de Strings que recorreria al mismo tiempo que lo voy guardando en otro String (que sería el definitivo) buscando el String que empezara por el ultimo caracter de antes y un punto. (Para mas seguridad podrías tener en cuenta el hecho de que hayas pasado por el "What should you do?". Una vez que hemos encontrado el C. nos saltamos esa linea y la siguiente a la hora de guardarlo en el String definitivo y solucionado ;) ;).

:brindis::brindis:

Danielo515
14/03/2011, 00:24
Muchas gracias ChuKii, al final lo he hecho más o menos como tu me has dicho adaptándolo a mi código chapucero. El problema es que funciona bien como para 200 preguntas, pero hay 100 que me da un error y no sigue.

Lo he hecho en pyton, si quereis posteo el código.

otto_xd
14/03/2011, 00:28
Me he partido el culo.

Cada uno con una solucion en un lenguaje distinto, ha sido entretenido xD

Danielo515
14/03/2011, 01:10
Al menos la lógica era común XD

PharaOnyx
14/03/2011, 08:02
Muchas gracias ChuKii, al final lo he hecho más o menos como tu me has dicho adaptándolo a mi código chapucero. El problema es que funciona bien como para 200 preguntas, pero hay 100 que me da un error y no sigue.

Lo he hecho en pyton, si quereis posteo el código.
Si posteas el código postea el fichero de datos también, o no habrá forma de saber en qué falla

Saludos, Alex

ChUKii
14/03/2011, 08:25
Muchas gracias ChuKii, al final lo he hecho más o menos como tu me has dicho adaptándolo a mi código chapucero. El problema es que funciona bien como para 200 preguntas, pero hay 100 que me da un error y no sigue.

Lo he hecho en pyton, si quereis posteo el código.

De nada compañero, me alegro de haberte sido de ayuda ;) ;).

Para las que falla no puedes poner un try/catch para capturar la excepcion?

:brindis::brindis:

Danielo515
14/03/2011, 09:26
Ya no hay problema ninguno. He modificado el código con algo que he soñado (bueno, no estaba dormido 100% pero estaba ahí, en el limbo) y ya funicona sin problema ninguno.

Las preguntas son para el examen de microsoft, el MCTS, así que creo que voy a adjuntar el archivo completo por si a alguien le viene bien.

ChUKii
14/03/2011, 09:49
Ya no hay problema ninguno. He modificado el código con algo que he soñado (bueno, no estaba dormido 100% pero estaba ahí, en el limbo) y ya funicona sin problema ninguno.

Las preguntas son para el examen de microsoft, el MCTS, así que creo que voy a adjuntar el archivo completo por si a alguien le viene bien.

Ah guay :D :D :D.

Por cierto que bestia, has metido el texto a saco en el codigo jajaja.

:brindis::brindis:

Danielo515
14/03/2011, 09:54
Ah guay :D :D :D.

Por cierto que bestia, has metido el texto a saco en el codigo jajaja.

:brindis::brindis:

Es que se supone que era para ahorrarme tiempo, si tengo que andar también preocupándome de leer de un arhcivo ya me puedo ir a mi casa XD

La utilidad de esto era para pasarlo al movil y ponerlo por la noche y que el me vaya leyendo la pregunta y la respuesta correcta.

ChUKii
14/03/2011, 09:55
Es que se supone que era para ahorrarme tiempo, si tengo que andar también preocupándome de leer de un arhcivo ya me puedo ir a mi casa XD

La utilidad de esto era para pasarlo al movil y ponerlo por la noche y que el me vaya leyendo la pregunta y la respuesta correcta.

Ah **** era para eso para lo que lo querias jejeje.

Pues nada tio dale cera y suerte con la certificacion ;) ;)

:brindis::brindis: