• Publicidad

Intercambio de variables en un fichero con perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Intercambio de variables en un fichero con perl

Notapor tunha » 2006-07-21 01:59 @124

Saludos.
Pues si estoy modernizandome y quiero hacer una migracion a postgres desde una base de datos en mysql.
Estoy usando el MySQL2PostgreSQL Pro, el programa esta muy bien pero tengo un pequeño conflicto con el formato de la fecha:

-- Error: ERROR: date/time field value out of range: "0000-00-00 00:00:00"
HINT: Perhaps you need a different "datestyle" setting. --


Para solucionarlo estoy haciendo un script en perl que me cambie las fechas a otro valor para luego recuperarlas, pero nunca habia usado perl y me esta costando mas de lo esperado.

Estaria muy agradecido de que alguien me dijese como hacer un script que simplemente cambie en un fichero donde ponga "0000-00-00 00:00:00" por "1970-01-01 00:00:00", es decir cambiar donde ponga un valor por otro dentro de un fichero.
saludos, gracias.
tunha
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2006-07-21 01:44 @114

Publicidad

Notapor explorer » 2006-07-21 06:00 @291

Para hacer cambios en un fichero de texto, !hay que hacerlo con los pies!

Supongamos que nuestro fichero de texto, datos.txt, sea así:
Código: Seleccionar todo
0000-00-00 00:00:00
23   0000-00-00 00:00:00
21   3   6  0000-00-00 00:00:00  e   dvfv f
dsf edsf dsfkl dsf dsjf ldskjf lskd 0000-00-00 00:00:00 ds ldsk flsjdf ldjsf

Entonces, con ejecutar el siguiente comando:
Código: Seleccionar todo
perl -p -i -e 's/0000-00-00 00:00:00/1970-01-01 00:00:00/g;' datos.txt

El fichero datos.txt se habrá convertido en:
Código: Seleccionar todo
1970-01-01 00:00:00
23   1970-01-01 00:00:00
21   3   6  1970-01-01 00:00:00  e   dvfv f
dsf edsf dsfkl dsf dsjf ldskjf lskd 1970-01-01 00:00:00 ds ldsk flsjdf ldjsf

* -p: procesa todas las líneas del fichero y luego las muestras en pantalla
* -i: los cambios se harán en el propio fichero de entrada
* -e: ejecuta el siguiente script por cada línea del fichero
* s///g: haz una sustitución por toda la línea (g)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor tunha » 2006-07-27 01:49 @117

Al poner esa instruccion me sale en el prompt el siguiente mensaje:

Can't do inplace edit without backup




Por cierto explorer si conoces un script realmente efectivo para la conversion de una base mysql to postgres me seria muy util por que he encontrado varios por la red pero ninguno me ha sido util para todos los casos que me hace falta.
saludos , gracias
tunha
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2006-07-21 01:44 @114

Notapor explorer » 2006-07-27 05:14 @260

Ese error te sale porque estás en Windows.... si estuvieras en Linux no te pasarían esas cosas...

Prueba con esto:
Código: Seleccionar todo
perl -p -i.org -e 's/0000-00-00 00:00:00/1970-01-01 00:00:00/g;' datos.txt


Para la conversión de MySQL a PostgreSQL, vete a la página de de PostGreSQL, en el apartado de conversiones y vas a la parte de MySQL. Hay un par de scripts para Perl (my2pg.pl y mysql2pgsql.pl, el más moderno) y un documento titulado Things to find out about when moving from MySQL to PostgreSQL.

A ver si te vale con todo esto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados