Portapapeles de office a notepad++

ier

Tengo cientos de frases en un documento word y tendría que poner cada una dentro de una etiqueta en un documento xml que tengo abierto con el notepad++.

Me gustaría hacer el proceso de una forma menos manual. He estado investigando y probando cosas pero no consigo dar con el método apropiado.

El portapeles de office no me deja interactuar con otros programas. He pensado que quizás con algun tipo de plug-in para notepad++ lo podría conseguir pero tampoco encuentro nada.

¿Sabéis algun método para hacer este "transplante" de la forma más automatizada posible?

He intentado abrir el documento xml en word pero pifostio que me monta es brutal.

PD: si la solución pasa por cambiar de programas se cambia.

C

Pon un pequeño ejemplo del fichero word y otro del xml.

1 2 respuestas
ier

#2 Pongamos que tengo en el word:
frase 1
frase 2
frase 3
..
y en el xml tendría que ser:

<etiqueta1>frase 1</etiqueta1>
<etiqueta2>frase 2</etiqueta2>
<etiqueta3>frase 3</etiqueta3>
...

Así cientos como ya he dicho.

Merkury

Sustituye los caracteres de inicio de linea y fin por <etiqueta></etiqueta> y fiesta.

El fin de linea es contrabarra n

Meleagant

¿Hay un carácter de inicio de línea?

1 respuesta
Merkury

#5 No que se me ha ido la pinza, solo hay caracter de retorno de carro que es fin de linea e inicio de la siguiente :D

Mas bien es sustituir el contrabarra n por las dos labels, primero la de cierre y luego la de inicio y así tendrás todas excepto la de apertura del primero.

#1 A mi con sublime text 2 y la opción de expresiones regulares lo he hecho.

Con esto lo he hecho :D

</label>"contrabarra" n<label>

No se pintan las putas contrabarras.

#7 ¬¬

Meleagant

Yo me haría un script VBS que procese línea por línea. Fácil, rápido y para toda la familia.

Eso sí, pasa el documento a TXT antes, que word usa XML de por sí.

Te dejo un código que me he escrito en 5 minutillos y te hace la faena. Escribe la misma etiqueta en todas las líneas. Si es literal "etiqueta1", "etiqueta2", añádele un contador.

On Error Resume Next

Set fs = CreateObject("Scripting.FileSystemObject")

Set archivoOriginal = fs.OpenTextFile("<ruta fichero original>")
Set archivoXML = fs.OpenTextFile("C:\salida.txt", 2,true)

Do While archivoOriginal.AtEndOfStream <> True
	linea = archivoOriginal.ReadLine
	linea2 = "<etiqueta>" & linea & "</etiqueta>"
	archivoXML.WriteLine linea2
Loop

archivoXML.Close
archivoOriginal.Close
2 respuestas
C

#1, lo que te dice #7 es una opción. Si no son muchas líneas, con Excel 2007 tienes la opción de algo más de 1 millón de líneas para hacer lo siguiente (en una sola columna, que siempre puedes usar más aunque tendrás que copiar y pegar en bloques).

Como sugerencia, para manejar ficheros grandes de texto, usa UltraEdit. Y para este tipo de transformaciones, usa Excel.

edit: Vale, acabo de ver que te hace falta que la etiqueta cambie su id con el numero de frase. Espera que te actualizo la fórmula de Excel.

edit 2: Ya tienes actualizada la imagen. Si tienes dudas sobre la fórmula de Excel me dices.

1 respuesta
ier

Se me ha olvidado mencionar que el esqueleto del xml ya está montado y que el word no es tan uniforme como en el ejemplo(tiene anotaciones entre frase y frase que no las quiero en el xml).

Ahora me pongo a mirar vuestras propuestas pero creo que no me van a servir.

El script no creo que me sirva. Cada frase tiene una etiqueta diferente, y con un contador tampoco porque no sigue un patrón, es decir, las primeras 5 frases tendrían la etiqueta <1_1><1_2>... y después las siguientes 7 serían<2_1>...

2 respuestas
Meleagant

#9

Si no hay un patrón que se pueda programar, entonces no te va a servir ni el script ni ninguna otra solución que no sea ponerlo a mano.

Lecherito

#9 Si no sigue un patrón, que quieres automatizar entonces?

ier

Por eso creo que la solución pasa por tener algún tipo de portapapeles en el que almacenar las frases.

Creo que me ha sobrado la palabra automatización, lo tendría que haber explicado mejor.

¿El colmo de la vagancia por no hacerlo manual? Puede, pero reo que debe haber alguna forma para ahorrar mucho tiempo. De verdad, son mogollon de frases y estar: seleccionar, ctrl+c, alt+tab, click, ctrl+v durante horas no me hace mucha gracia.

#8 Ahora mismo lo estudio, creo que la solución puede estar por ahí también. Gracias

2 respuestas
Meleagant

Puedes modificar el script para que en cada línea te pregunte la etiqueta. De esa manera lo único que tendrías que hacer es escribir los nombres de cada etiqueta uno tras otro y el proceso de poner <> </> y saltar de línea en línea lo haría automático.

Yo creo que ya más o menos tienes ahí todas las opciones.

1 respuesta
Merkury

#13 Desde luego si no es un patrón uniforme tu solución es la única viable y aun así puede que sea mas coñazo XD.

De todas maneras automatizar cosas así #1 al final resulta mas costoso mirar como hacerlo y hacerlo automático, que hacerlo a mano desde el principio. XD

7 días después
C

#12 Te respondo por aquí para iluminar al tendido con respecto al potencial de Excel para este tipo de ñapas.

Aquí screenshot (la tercera columna es la que se genera a partir de las dos primeras):

Código (comentado para newbies, como le gusta a eisen):

http://pastebin.com/6ccZxxxH

Eso sí, obligatorio cuando ejecutas la macro estar situado en la hoja donde estén los datos, ya que uso ActiveSheet.

Tarda un poco. Ten en cuenta que se recorre letra a letra cada mensaje.
Tardaría menos si no hubiera situado el foco en la fila que procesa. Pero es mejor de cara a ver cuánto le queda.

Le he incoporado una sentencia DoEvents. Con lo cual, si por lo que sea quieres cortarlo, ves a la ventana de VBA mientras se ejecuta (tenla abierta) y deja la tecla ESC pulsada.

Cualquier cosa mp, irc o por aquí.

1 4 respuestas
ier

#15 Joder, muchas gracias tio. El código está muy bien explicado. Ahora mismo lo pruebo y te digo que tal.

Merkury

#15 Mola el aporte, pero el tono este de superioridad que gastas en todos tus post dan ganas de mandarte a paseo tio.

Yo no creo que haga falta que los baneen #17, pero bueno hay formas y formas de decir las cosas. Puedes hacer un aporte de puta madre y quedar como un señor o hacer un aporte de puta madre como #15 y quedar de culo con frases como "Código (comentado para newbies, como le gusta a eisen):" o "Te respondo por aquí para iluminar al tendido con respecto al potencial de Excel"

6 8 respuestas
Tunnecino

#17 Toda la razón, gentuza como esta hace que este foro vaya como va... a ver si los mods echan a los code, blzkz y cía.

5
metanoia

A ver si banean a la chupipandi dev esta de una vez.

6
BH99

#17 Más razón que un santo, el prenda este siempre va con esos aires de superioridad por el foro intentando dejar a todo el mundo por el suelo.
Es cierto que esta vez ha sido de ayuda pero para ayudar de esa manera mejor que no escriba nada...

5
C

#17, has desatado a una jauria de nerds infantiles. ¿Dónde ves en mi mensaje un tono prepotente?

Si interpretas lo de iluminar como un tono de superioridad, quizás es que el complejo de inferioridad lo tengas tú.

Y lo de código comentado para newbies es obvio. Un código no se comenta línea por línea, pero si alguien quiere aprender, viene bien que esté así.

Pásate por irc, me conoces y luego me dices si soy prepotente.

1 respuesta
elkaoD

#17 mi no entender.

2 respuestas
Merkury

#22 wut?

#21 Ejemplo de lo que me refiero #2 ocultado porque evidentemente estabas aportando mucho.

#25 He cogido el primer ejemplo que me ha venido a la cabeza, que es de los últimos que he visto, pero que no voy a hacer de esto una cruzada. Por lo que veo no soy el único que lo piensa y también mucha gente que piensa lo contrario como todo, creo que discutir de esto es una chorrada como un piano.

1 2 respuestas
iAtlas

#17 Cuantisima razon. No es la primera vez que le veo salir con una respuesta fuera de tono. En vez de ir tan sobrado podria dedicar el tiempo en optimizar el codigo y hacerlo mas eficiente, porque el pastebin ese... tiene tela. Pero en fin, paso de desviar mas el hilo. Si funciona, gg.

Y en IRC ya ni hablemos... menos mal que le puse un /ignore bien guapo hace tiempo

2 1 respuesta
elkaoD

#23 que te la estás cogiendo con papel de fumar si #15 te parece prepotente.

#23 osea que le tienes cruzado porque puso en un post que no le gusta HTML (es un negado y él lo sabe).

Nah, tío, te has columpiado.

2 respuestas
Tunnecino

Como estamos viendo, ya empiezan a aparecer la chupipandi de #15, como podemos verlo en #22 y #25

Y vamos, sobre #24 más razón que un santo, si señor.

2
metanoia

Ya viene elkaoD a defenderle, inb4 toda la chusma de #mv.nerd pasándose para echarte mierda #17. Tú ni caso.

2
C

#23 si fuera prepotente, no hubiera puesto lo siguiente:

www.mediavida.com/foro/dev/novato-en-programacion-473023#16

Diría que hacer webs es de mierdas. Y, todo lo contrario, siempre ha sido mi punto débil y lo reconozco. En serio, que algunos tenéis una mente sucia y no de ver porno precisamente.

Más prepotente es ir por ahí sin venir a cuento diciendo que la gente tiene tono prepotente.
Piensa el ladrón que son todos de su condición.

Es que es acojonante. Le dedico 2h a ayudar a un forero y apareces tú, sin venir a cuento, llamándome prepotente. ¿Pero tú te has leído?

#23 te doy otro argumento más. Si fuera prepotente, no estaría despollándome vivo por irc viendo como Atlas, Tunner, Metanoia,etc. me están troleando de coña. Pero vamos, que no tengo que convencerte de nada. Eso sí, que gracias a tí nos estamos echando una risas en irc, no hay duda.

1 respuesta
Tunnecino

#28 Me dirás que es la primera vez que te metes con mis trabajos por IRC, diciendo que lo web es una mierda, que si tal, que si pascual.

Este "individuo" (por llamarlo de alguna manera), no se que tipo de cruzada tiene contra la programación web, pero lo que está claro es que no es un tema que le apasione, y mucho menos que lo acepte, ya vemos sus respuestas aquí en este mismo thread, como desvirtúa el tema, y tal.

3
PiradoIV

Todos sabemos qué clase de persona es CodE07, ceñiros al hilo por favor.

5

Usuarios habituales

  • BH99
  • Merkury
  • metanoia
  • elkaoD
  • Tunnecino
  • ier
  • Meleagant