Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Intercambio de variables en un fichero con perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Vie Jul 21, 2006 12:59 am
tunha
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Jul 2006
Mensajes: 2
Intercambio de variables en un fichero con perl Responder citando

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.
Mensaje Vie Jul 21, 2006 5:00 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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:
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:
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:
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)
Mensaje Jue Jul 27, 2006 12:49 am
tunha
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Jul 2006
Mensajes: 2
Responder citando

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
Mensaje Jue Jul 27, 2006 4:14 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4082
Ubicación: Valladolid, España
Responder citando

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

Prueba con esto:
Código:
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.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group