Autor
|
Tema: Acciones sobre archivos de texto. [Batch] (Leído 445,165 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
@ServH Muestra el código que llevas hecho por ti mismo, aquí no se hacen tareas. Te muestro un ejemplo para iterar el log y asignar el "nombre" a la variable de FOR: For /F "UseBackQ Tokens=1,* Delims= " %%a In ("Archivo.log" ) Do (Echo %%~b )
Luego, solo tendrías que renombrar los archivos utilizando dicha variable para asignar el nuevo nombre del archivo jpeg. Saludos
|
|
« Última modificación: 10 Marzo 2015, 17:59 pm por Eleкtro »
|
En línea
|
|
|
|
ServH
Desconectado
Mensajes: 5
|
Hola Elektro.
Pues no tengo nada más que el pseudocódigo ya que voy probando módulos para que me hagan pequeñas funciones. (Estoy empezando con este lenguaje)
Ahora te pondré una muestra.
Lectura del archivo.
filename name email comment twitter phone PHOTO_1 maria PHOTO_6 paco PHOTO_7 juan En un primer lugar lo que quiero que haga el bat es leer este .txt y guardar en una variable el nombre del fichero var1=PHOTO1 y otra variable con el nombre var=maria Pero estas variables quiero que guarden relación (No se como explicarlo).
Después el .bat hará una lectura de los archivos y cuando encuentre PHOTO1 que es = a var1 lo cambie por var2.
Se podría antes de ejecutar nada hacer un tratamiento del log quedando así. PHOTO_1 maria PHOTO_6 paco PHOTO_7 juan
P:D No pido el código hecho, solo quiero entender que tengo que hacer y solucionar las cosas en las que estoy fallando.
Un saludo. y gracias.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
P:D No pido el código hecho, solo quiero entender que tengo que hacer y solucionar las cosas en las que estoy fallando. Ok, pues te explico, el log consiste en dos "argumentos" (o Tokens), el primero sería el nombre de la imagen (PHOTO_1), y el segundo sería el nombre de la persona (María), pues, solo tienes que modificar el parámetro "Tokens" de un For /F (cómo el que te mostré antes), para que tome esos dos argumentos por separado, usando cómo deliminator de argumento el caracter "espacio", de esa forma almacenarás en la variable %%a el nombre de la imagen, y en la variable %%b el nombre de la persona, obteniendo esa "relación" que quieres. Lo que acabo de comentar ya lo hace el For que mostré arriba, pero si quieres entenderlo mejor, lee aquí: For /f - Loop through text | Windows CMD | SS64.comSaludos
|
|
« Última modificación: 10 Marzo 2015, 18:05 pm por Eleкtro »
|
En línea
|
|
|
|
ServH
Desconectado
Mensajes: 5
|
Hola Elektro.
Primero que nada agradecerte la ayuda desinteresada, me ha sido de utilidad entender mejor que es lo que necesita el programa.
Y en segundo lugar, y observando que tienes experiencia en este lenguaje, ¿Crees que es la manera más optima de realizar esto?
Muchas gracias por el tutorial.
Un saludo.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
¿Crees que es la manera más optima de realizar esto? No, Batch es una herramienta limitada, está diseñada y orientada a la automatización de tareas simples, los resultados y la eficiencia de cualquier otro lenguaje siempre será más óptimo que Batch, sin excepción alguna. Sobre el problema que tienes, en parte ese texto que has mostrado se podría considerar un archivo CSV delimitado por espacios, y digo en parte, porque no se si alguno de los campos de esa tabla contiene un "espacio" (ej: 'María del monte'), entonces el algoritmo que uses para delimitar los campos basándose en ese "espacio" delimitador no servirá, y será mucho más complejo, porque si la cantidad de espacios es desconocida... no se cómo vas a reconocer un nombre a menos que utilices una base de datos de nombres, jaja. Por otro lado, la tarea no requiere más que la utilización de un lenguaje simple cómo es Batch (suponiendo que no haya más espacios adicionales), pero óptimo no es que sea. En fin, no me enrollo más, lee esta respuesta para hallar una solución mucho más eficiente que Batch: http://foro.elhacker.net/programacion_general/programa_de_busqueda_con_archivo_csv-t431563.0.html;msg2001628#msg2001628PD: Ese mismo Snippet que desarrollé en VB.Net te debería servir, pero cambiando el delimitador por un espacio o tabulación o lo que uses, claro está. PD2: Cómo explico en ese comentario, cualquier otro lenguaje sirve, cómo Python, Ruby, C/C++, Java, etc, la resolución del problema es practicamente la misma en cualquier lenguaje, que consiste en generar un búcle que lea linea por linea, solo que unos lenguajes te lo ponen más fácil que otros, y a partir de ahí la elaboración del algoritmo para hacerlo menos o más sofisticado es cosa tuya. Saludos!
|
|
« Última modificación: 11 Marzo 2015, 10:12 am por Eleкtro »
|
En línea
|
|
|
|
ServH
Desconectado
Mensajes: 5
|
Buenísima la respuesta.
Pero estoy un poco "atado" por la gente de "arriba" jaja, voy a intentar convencerlos de que este sistema no es óptimo por que ahora mismo te iba a escribir por el mismo problema.
¿Que pasa si tiene un nombre compuesto?, ya está el lío montado, no me sirve.
En resumen, y por si tienes una idea mejor que la mía, la situación que se me ha planteado es esta.
Tenemos un software que toma una fotografía, pero las opciones de este programa solo nos permite guardarlas con un nombre y un sufijo EJ: PHOTO_1
Después al usuario le pide un nombre, que este se guarda para usarlo en el campo EMAIL (Algo que no entiendo, por que lo ha desarrollado así)
Y la necesidad era simplificar el proceso de renombrar las fotos, para no tener a una persona aburrida haciendo esto y que fuera con un único clic haciendo uso del log.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
@ServH
Si los campos de esa tabla están separados usando "tabulación", entonces lo tienes fácil y puedes utilizar el ejemplo que mostré. En cambio, si se usa un espacio para separar los campos, y si además hay nombres compuestos cómo has comentado, entonces no hay nada que sea viable, porque realmente necesitarías gestionar una base de datos de nombres para tomarla como referencia a la hora de delimitar correctamente los campos y así poder aumentar la probabilidad de éxito (no sería 100% fiable).
Lo único que se me ocurre, en caso de que los campos esten separados por espacios y no por tabulaciones, es que le pidas al autor de la aplicación que modifique el código para usar un caracter delimitable (por ejemplo un punto y coma ";"), por que el diseño actual sería incorrecto e improductivo.
PD: Y si la aplicación es un ensamblado .Net y no puedes recurrir a la ayuda del autor, entonces siempre puedes recurrir a la mágia de la ingenieria inversa (en este caso utilizando técnicas mediante Reflection) para localizar y modificar el caracter que está usando el programa para separar las celdas.
Saludos.
|
|
|
En línea
|
|
|
|
ServH
Desconectado
Mensajes: 5
|
@Eleкtro
Pues intenté hablar con el desarrollador, y le pedí que incluyera un módulo para que el campo que el usuario rellena como "nombre" que luego acaba siendo el asunto del correo si eliges la opción de enviar la imagen lo cambiara, pero ni caso.
Se me estaban ocurriendo un par de cosas con java, y tener un .jar sencillo que me haga la misma función, además de que tengo más libertad para programar en este lenguaje.
Seguramente, abra otro hilo, para no ensuciar este, y pediré algún que otro consejo ya que estoy oxidado.
Muchas gracias @Eleкtro por la ayuda prestada hasta el momento. Un saludo.
|
|
|
En línea
|
|
|
|
light310oct
Desconectado
Mensajes: 15
|
Yo tengo una duda sobre algo que he intentado hacer con VB6.0 y nada mas no he podido sera que lo podre hacer con un batch?, la idea es agregar datos entre la ultima etiqueta "</tr>"y la etiqueta "</table>"a fin de ir armandome una tabla con datos de una variable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
« Última modificación: 30 Marzo 2015, 10:06 am por Eleкtro »
|
En línea
|
Si buscas resultados distintos, no hagas siempre lo mismo
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Yo tengo una duda sobre algo que he intentado hacer con VB6.0 y nada mas no he podido sera que lo podre hacer con un batch?, la idea es agregar datos entre la ultima etiqueta "</tr>"y la etiqueta "</table>"a fin de ir armandome una tabla con datos de una variable Si, es posible hacerlo, pero la forma de llevar a cabo esa tarea en un lenguaje simple cómo Batch resultaría en un código bastante tedioso e ineficiente, Batch no puede manipular documentos Html, y además, ya que estás utilizando un lenguaje más apto no deberías rebajar el nivel a una herramienta simplona cómo Batch, no hay necesidad ni justificación para hacer eso, lo mejor es que intentes seguir haciéndolo en un lenguaje capacitado, yo personalmente te recomiendo VB.Net/C#, aunque de todas formas en VB6 puedes utilizar expresiones regulares para hacerlo de una manera menos efectiva. Saludos
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Modificar archivos de texto [batch] [Perl]
« 1 2 »
Scripting
|
bjeli1980
|
10
|
13,751
|
17 Mayo 2010, 09:07 am
por bjeli1980
|
|
|
[BATCH] Ayuda guardando archivos de texto a php
Scripting
|
Geormarsch
|
2
|
4,360
|
20 Septiembre 2011, 16:33 pm
por Poderoscuro1207
|
|
|
[BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto
Scripting
|
Eleкtro
|
2
|
8,099
|
15 Marzo 2014, 15:17 pm
por FranciskoAsdf
|
|
|
Como puedo arrastrar y concatenar archivos de texto en un BATCH
Scripting
|
PUCH84
|
6
|
10,022
|
28 Abril 2014, 09:49 am
por PUCH84
|
|
|
Ayuda con batch para crear archivos de texto plano
Scripting
|
seu230
|
6
|
3,125
|
5 Octubre 2018, 10:28 am
por seu230
|
|