[BATCH] Modificar Registros Fichero por script

Iniciado por xavima, 25 Abril 2013, 16:08 PM

0 Miembros y 1 Visitante están viendo este tema.

xavima

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

engel lex

@.@ 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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

xavima

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

Eleкtro

#3
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.








Eleкtro

#4
Código (dos) [Seleccionar]
@echo off
Setlocal enabledelayedexpansion

For %%# in (*.txt) Do (
Set "Registry=%%~n#"
Set "Date=20!Registry:~0,6!"
Set "Time=!Registry:~6,6!"
Set "Ficha=!Registry:~-4!"
Set "Fixed=00 0 00 0 01"
Set "NewRegistry=!Date! !Time! !Ficha! !Fixed!"

Echo Old Registry: !Registry!
Echo New Registry: !NewRegistry!

REM Rename "%%#" "!NewRegistry!%%~x#"
)

Pause&Exit


Output:
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:

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:
Set "Ficha=!Registry:~-4!"
Por esta otra:
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!








xavima

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