Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: xavima en 25 Abril 2013, 16:08 pm



Título: [BATCH] Modificar Registros Fichero por script
Publicado por: xavima en 25 Abril 2013, 16:08 pm
Hola

Ante todo me presento, me llamo Xavi, soy de nuevo ingreso en este foro y este es mi primer post. Mi trabajo es administrativo en el dpto. de rrhh de una empresa.

Tened presente que antes de lanzar el tema he estado consultado por internet y vuestro foro, y la verdad, no encuentro, o no he sabido encontrar, la solución adecuada al problema.

Voy con mi problema y haber que se le puede hacer.

Tengo un fichero que contendrá unos 15000 registros, que son la recopilación de datos de unos controles de presencia.

En la empresa se ha cambiado de programa de gestión, y como todo cambio, no importa los registros obtenidos hasta la fecha, por lo que no puedo tener un histórico. Y, encima, el proveedor no sabe como hacerlo.

Como me interesa tener registrados y actualizados en el nuevo programa todos los movimientos desde prinicipios de año, para evitar tener dos programas instalados, me encuentro que el nuevo programa tiene otro formato de tratamiento de los datos.

Me pregunto, ya que mis conocimientos de script son muy limitados, si alguno de la comunidad puede lanzarme una mano.

La estructura antigua del fichero es: 130425075500000001010
Y con la nueva estructura debería ser: 20130425 075500 0101 00 0 00 0 01
(con los espacios incluidos, y eliminando ceros del registro inicial)

Estoy buscando una solución que me automatize los 15000 registros, pues sino puede ser mortal tenerlo que hacer a mano.

Gracias anticipadas a todos por vuestra atención.

Un Saludo

Xavi


Título: Re: Modificar Registros Fichero por script
Publicado por: engel lex en 25 Abril 2013, 20:42 pm
@.@ no es mucho trabajo pero para eso las empresas necesitan computistas...

el fichero es dentro del sistema? es un archivo en disco? los ceros iniciales (que eliminaste) son relevantes? porfa brinda unos pocos datos mas para entender (o explica exactamente que haces a mano)


Título: Re: Modificar Registros Fichero por script
Publicado por: xavima en 26 Abril 2013, 08:12 am
Hola

Bien, voy a facilitar más datos:

1) el fichero es un txt y cada registro es una linea, es editable desde el notepad
2) el registro lo he manipulado manualmente para dejarlo como lo necesita ahora el nuevo programa, con los espacios y ceros posteriores al 0101.
3) los ceros eliminados entiendo que la nueva aplicación no los necesita por delante sinó por detrás.
3) la estructura del registro son
- 8 digitos fecha
- 1 espacio
- 6 digitos hora
- 1 espacio
- 4 digitos numero tarjeta trabajador
- 1 espacio
- y este registro fijo: 00 0 00 0 01

No me importa que los nuevos registros sean grabados en otro fichero, pues debo importalo al nuevo programa y tan solo le importa la estructura.

Espero haberme explicado mejor.

Un saludo

Xavi


Título: Re: Modificar Registros Fichero por script
Publicado por: Eleкtro en 30 Abril 2013, 12:36 pm
Muchos detalles, pero falta el más importante... ¿Para Linux o para Windows?, vale, acabo de leer lo del Notepad, a no ser que uses Wine para abrir el notepad en Linux me imagino que trabajs en Windows, haz el favor de especificar el detalle cuando formules preguntas.


Título: Re: [BATCH] Modificar Registros Fichero por script
Publicado por: Eleкtro en 30 Abril 2013, 12:53 pm
Código
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3.  
  4. For %%# in (*.txt) Do (
  5. Set "Registry=%%~n#"
  6. Set "Date=20!Registry:~0,6!"
  7. Set "Time=!Registry:~6,6!"
  8. Set "Ficha=!Registry:~-4!"
  9. Set "Fixed=00 0 00 0 01"
  10. Set "NewRegistry=!Date! !Time! !Ficha! !Fixed!"
  11.  
  12. Echo Old Registry: !Registry!
  13. Echo New Registry: !NewRegistry!
  14.  
  15. REM Rename "%%#" "!NewRegistry!%%~x#"
  16. )
  17.  
  18. Pause&Exit

Output:
Código:
Old Registry: 130425075500000001010
New Registry: 20130425 075500 1010 00 0 00 0 01

Confirma que es correcto, porque a mi no me cuadran las cosas, como ves obtengo esto:

Código:
20130425 075500 1010 00 0 00 0 01

Pero según tus indicaciones la ficha debería ser "0101"

Deberías especificar cual es el registro fijo de este string: 130425075500000001010

Yo he asumido que la ficha eran los últimos 4 dígitos, pero quizás haya que eliminar el último dígito y coger los ultimos 4, entonces modifica esta línea:
Código:
Set "Ficha=!Registry:~-4!"
Por esta otra:
Código:
Set "Ficha=!Registry:~-5!" & Set "Ficha=!Ficha:~0,4!"

Así obtienes exáctamente el nuevo registro, pero como no sé la estructura del antiguo registro... no sé si es lo correcto.

Saludos!


Título: Re: [BATCH] Modificar Registros Fichero por script
Publicado por: xavima en 7 Mayo 2013, 09:38 am
Hola EleKtro,

Gracias por el código. Disculpa no haber contestado antes, pero he estado ausente y desconectado de la red por temas personales.

Efectivamente, te dá un error porqué inicialmente has interpretado que los 4 ultimos digitos son la ficha, cuando son a partir del ~5, los 4 siguientes, por lo que lo correcto es el segundo código que has indicado:
Set "Ficha=!Registry:~-5!" & Set "Ficha=!Ficha:~0,4!"

Voy a probarlo e informo.

Xavi