Autor
|
Tema: ayuda con pequeño script (Leído 5,981 veces)
|
ramos_45
Desconectado
Mensajes: 11
|
Buenas a todos.
Hace años estuve registrado en este foro pero por algún motivo , tal vez inactividad , mi cuenta no existía.
El motivo de este post, es para ver si algún gurú me podría hacer un script muy simple, ya que yo desconzco de programacion, aunque soy capaz de editar algo de codigo.explicó el caso.
Tengo unos documentos txt de gcode(programación cnc) los cuales llevan diferentes líneas. En cada línea lleva un código de grupo,por ejemplo un sería DMN_101. En medio de la línea.
Necesito eliminar completamente las líneas que contengan diversos códigos de estos que yo le asigne, y que el resto las dejé intactas, es decir, en el siguiente ejemplo:
Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx
Si yo quisiera eliminar las UAN_202 y UIU_111, simplemente me dejara las 2 líneas con DMN_101 y me creara otro txt con el nombre "FILTRADO (nombre original).txt) a poder ser
Espero haberme explicado, un saludo
|
|
« Última modificación: 26 Septiembre 2018, 22:53 pm por ramos_45 »
|
En línea
|
|
|
|
EdePC
|
Saludos, - En la Command Line de Windows (cmd) puedes utilizar el comando FIND con el modificador /v para que imprima las líneas que NO contengan la palabra buscada, y opcionalmente utilizar /i para no distinguir mayúsculas de minúsculas: copy con doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx^Z 1 archivo(s) copiado(s). type doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" > FILTRADO_doc.txt type FILTRADO_doc.txt ---------- DOC.TXT Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx
|
|
|
En línea
|
|
|
|
nokia-6260
Desconectado
Mensajes: 4
|
Así sin mirar mucho y con esto de aprender un poco de python hice este script , según mis pruebas funciona, aunque seguro que se puede hacer mil veces mejor. Saludos.
#!/usr/bin/env python
file_r = open("Tu_home/sin_filtrar.txt",'r') file_w = open("/Tu_home/filtrado.txt", 'w')
lines = file_r.readlines()
for i in lines: print(i) resul_UAN_202 = i.find('UAN_202') resul_UIU_111 = i.find('UIU_111') if ((resul_UAN_202 > 0) or (resul_UIU_111 >0)): print("borrar") else: file_w.write(i) print(lines)
|
|
|
En línea
|
|
|
|
animanegra
Desconectado
Mensajes: 287
|
Si es solo eliminar las lineas que cumplan un patron puedes tambien simplemente usar grep que para eso está: cat fichero_de_entrada | grep -v "patron_a_quitar_1\|patron_a_quitar_2\|patron_a_quitar_3" > fichero_de_salida
Saludos.
|
|
|
En línea
|
42 No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
|
|
|
ramos_45
Desconectado
Mensajes: 11
|
Gracias por vuestras respuestas! Saludos, - En la Command Line de Windows (cmd) puedes utilizar el comando FIND con el modificador /v para que imprima las líneas que NO contengan la palabra buscada, y opcionalmente utilizar /i para no distinguir mayúsculas de minúsculas: copy con doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx^Z 1 archivo(s) copiado(s). type doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" > FILTRADO_doc.txt type FILTRADO_doc.txt ---------- DOC.TXT Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx
Entiendo que con ese codigo solo usarías las líneas 1,8,14y 16 no? El resto que pones es lo que respondería. Los tengo muchos códigos que copiar para eliminar, unos 80,y posteriormente tal vez tenga que añadir más. Este script yo sabría modificarlo y añadirlos, pero lo van a usar otras personas que no. Habría la posibilidad de al inicio crear un menú que te pregunte si quieres añadir o quitar códigos? Se podría simplificar la línea: find /v /i "UAN_202" doc.txt | find /v /i "UIU_111" > Para no tener que poner así los 80 códigos?
|
|
|
En línea
|
|
|
|
ramos_45
Desconectado
Mensajes: 11
|
Así sin mirar mucho y con esto de aprender un poco de python hice este script , según mis pruebas funciona, aunque seguro que se puede hacer mil veces mejor. Saludos.
#!/usr/bin/env python
file_r = open("Tu_home/sin_filtrar.txt",'r') file_w = open("/Tu_home/filtrado.txt", 'w')
lines = file_r.readlines()
for i in lines: print(i)
resul_UAN_202 = i.find('UAN_202') resul_UIU_111 = i.find('UIU_111') if ((resul_UAN_202 > 0) or (resul_UIU_111 >0)): print("borrar") else: file_w.write(i) print(lines)
Muchas gracias, yo creo que sí. En batch se crearlo, pero como lo copió y ejecutó para phyton?
|
|
|
En línea
|
|
|
|
ramos_45
Desconectado
Mensajes: 11
|
Si es solo eliminar las lineas que cumplan un patron puedes tambien simplemente usar grep que para eso está:
Saludos.
Sería ideal pero lo necesito para Windows
|
|
|
En línea
|
|
|
|
ramos_45
Desconectado
Mensajes: 11
|
Gracias por vuestras respuestas y vuestra ayuda.
Se podría añadir el documento arrastrando?
Se me a ocurrido otra opción que me ayudaría mucho, y sería resaltar en colores cuando encuentre diversas cosas. Por ejemplo:
Xxxxxxxxx DMN_101. XxxxxxM03xx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxM00xxx
Cuando encuentre M03, me lo pinte de verde y cuando encuentre M03 me lo pinte de rojo
Obviamente, tendría que ser en la consola, pero me gustaría también que exportará como hemos dicho antes(aunque aquí no pueda tener colores)
|
|
« Última modificación: 27 Septiembre 2018, 13:13 pm por ramos_45 »
|
En línea
|
|
|
|
**Aincrad**
|
1) No hagas doble o mas post seguidamente, lee las reglas.
Se podría añadir el documento arrastrando?
Esto solo lo permite la CMD a partir de Windows 7. aquí te dejo un ejemplo:
@echo off goto menu :err echo Error :v . & pause & goto menu :continue echo tu archivo es %op% pause & exit :menu cls echo/ echo introduzca el directorio del archivo / o Arrastre. echo/ set /p op= --------------- : if not defined op (goto:menu) >NUL if not exist %op% (goto:err) >NUL goto continue
Se me a ocurrido otra opción que me ayudaría mucho, y sería resaltar en colores cuando encuentre diversas cosas. Por ejemplo:
Xxxxxxxxx DMN_101. XxxxxxM03xx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxM00xxx
Cuando encuentre M03, me lo pinte de verde y cuando encuentre M03 me lo pinte de rojo
Ya esto no lo vas a lograr con batch.
|
|
« Última modificación: 27 Septiembre 2018, 14:42 pm por **Aincrad** »
|
En línea
|
|
|
|
EdePC
|
- Gracias a FINDSTR puedes hacer uso de un fichero aparte que contenga todas las palabras que quieres filtrar: C:\Users\EdSon\Desktop>type doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx UAN_202 xxxxxxxxx Xxxxxxxxx UIU_111 xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx C:\Users\EdSon\Desktop>type filtro.txt UAN_202 UIU_111 C:\Users\EdSon\Desktop>findstr /v /i /g:filtro.txt doc.txt Xxxxxxxxx DMN_101. Xxxxxxxxx Xxxxxxxxx DMN_101xxxxxxxxx
- Puedes crear un fichero .bat (o .cmd) para utilizar el código que ha compartido **Aincrad** y en lugar de poner: echo tu archivo es %op%
-- pondrías: findstr /v /i /g:filtro.txt %op% > FILTRADO_%op%
-- No te olvides del fichero filtro.txt donde están las palabras a filtrar. Si el script encuentra dicha palabra en una línea elimina toda esa línea.
- Colorear en CMD si es posible pero no muy práctico, se puede utilizar el mismo FINDSTR con el modificador /A, el detalle es que solo colorea los nombres de los ficheros que contienen la palabra a buscar, por ende se tendría que crear tantos ficheros como líneas haya en tu fichero doc.txt
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] Crear pequeño script en VB
Programación Visual Basic
|
polmp
|
1
|
2,077
|
9 Mayo 2009, 22:16 pm
por BlackZeroX
|
|
|
Ayuda con pequeño script en php
PHP
|
Cergath
|
4
|
3,289
|
16 Mayo 2010, 18:42 pm
por Cergath
|
|
|
[Shell script] Un pequeño script para ver temperaturas.
Scripting
|
manute_powa
|
3
|
6,026
|
7 Enero 2012, 02:18 am
por manute_powa
|
|
|
pequeño script de automatizacion
Scripting
|
crisoof
|
5
|
5,107
|
23 Noviembre 2016, 21:40 pm
por engel lex
|
|
|
Ayuda para crear un pequeño script
Programación General
|
0x22
|
5
|
5,187
|
17 Diciembre 2021, 06:07 am
por 0x22
|
|