Perl en Español

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

insertar ;

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Mar May 13, 2008 9:24 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
insertar ; Responder citando

Tengo un problema muy básico y se que la solución es casi para dar risa tengo un archivo con la siguiente información.

SQL:
INSERT INTO ACTIVO_PLV (fecha, idcid, idplv, disponibilidad, latencia, perdida_paq, jitter_avg, disponibilidad_remoto, throughput, clase) VALUES(to_date('20080512000900','YYYYMMDDHH24MISS'),142113,1585,1,50.8,0,5.75,1,0,1)
INSERT INTO ACTIVO_PLV (fecha, idcid, idplv, disponibilidad, latencia, perdida_paq, jitter_avg, disponibilidad_remoto, throughput, clase) VALUES(to_date('20080512000900','YYYYMMDDHH24MISS'),142113,1586,1,34.2142857142857,30,8.6,1,0,2


Lo que necesito es, poner ';' al final de cada sentencia. Como podrán ver es para insertar en la base de datos.
¿Me podrían echar la mano?
Saludos
Mensaje Mar May 13, 2008 9:32 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Si cada sentencia está en una línea distinta, te vale con hacer un bucle por todas las líneas de ese fichero, y poner un ';' al final.

Algo como
Perl:
open FICHERO, "<fichero.sql";
open FICHER2, ">ficher2.sql";
while (<FICHERO>) {
    chomp;
    print FICHER2 "$_;\n";
}
close FICHER2;
close FICHERO;


También se puede hacer de forma directa en la línea de comandos:

bash:
perl -p -i -e 's/$/;/' fichero.sql
Mensaje Mar May 13, 2008 9:44 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Excelente. Sí, me había tocado ver que también lo hacían desde terminal, pero aquí el problema es que son como 300 archivos, mi idea es hacer un cat, de todos, juntarlos en uno solo y después correr la aplicación en Perl.

Por cierto para lo que te comento en Perl si yo quiero tomar un valor como la fecha 20080513 pero también quiero que tome los demás archivos que tengan X terminación.
Ejemplo
Código:
-200805131
-200805132
-200805133

¿Cómo hago esto? Porque en terminal sería con * pero en Perl, ¿cuál sería este símbolo? Question
Mensaje Mar May 13, 2008 10:24 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Para juntar todos los ficheros en uno solo, puedes usar el comando cat:
bash:
cat *.sql > uno_solo.sql


Y para lo del comodín, sirve el mismo:

Perl:
foreach my $fichero ( <200805*.sql> ) {
    # ...
}
Mensaje Mar May 13, 2008 11:07 am
Kiloko
Perlero Adicto
Perlero Adicto
Registrado: 10 Jul 2007
Mensajes: 244
Ubicación: MOnterrey NL
Responder citando

Ok. Este sería mi programa ya funcionando. Por el momento opté por hacer el cat, en un *.sh, el cual me genera un sql.sql.

Aún no comprendo bien la opción de
Perl:
foreach my $fichero ( <200805*.sql> ) {
    # ...
}


Perl:
#!/usr/bin/perl -w
use POSIX;
#**************************************************
my $AYER = strftime("%Y%m%d", localtime(time - 86400));
#**************************************************
print "$AYER";

open FICHERO, "<sql.sql";
open FICHER2, ">$AYER.sql";
while (<FICHERO>) {
    chomp;
    print FICHER2 "$_;\n";
}
close FICHER2;
close FICHERO;

{
 open (Data, ">>$AYER.sql");
      print Data "commit;\n";
      print Data "exit\n";
      close (Data);
}


Gracias Smile
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