Foros del Web » Programación para mayores de 30 ;) » Programación General »

Eliminar frases desde una palabra clave hasta otra,

Estas en el tema de Eliminar frases desde una palabra clave hasta otra, en el foro de Programación General en Foros del Web. Hola, Primeramente felicitar a los usuarios de este foro , siempre os he utilizado como guia de referencia y recomendado para consulta de dudas. Bueno ...
  #1 (permalink)  
Antiguo 08/07/2010, 11:16
 
Fecha de Ingreso: julio-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Eliminar frases desde una palabra clave hasta otra,

Hola,
Primeramente felicitar a los usuarios de este foro , siempre os he utilizado como guia de referencia y recomendado para consulta de dudas.

Bueno mi problema es el siguiente, soy administrador de sistemas junior , y me han encomendado utilizar perl para "depurar un fichero" , este fichero tiene unas 60 mil líneas , exactamente es un export de Oracle, a continuación os muestro algunas lineas de este código,


REM CREATE TABLE "NUEVODW"."ABALON_CAMBIO_ESTADO_INST" ("ID_INSTALACION"
REM NUMBER, "CODIGO_INSTALACION" VARCHAR2(40), "ESTADO_ANTIGUO"
REM VARCHAR2(4), "ESTADO_NUEVO" VARCHAR2(4), "FECHA_CAMBIO" DATE,
REM "FECHA_DATOS" DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
REM STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE
REM "ABA_DATA" NOLOGGING NOCOMPRESS ;
~

lo que tengo que hacer es , crear un script que elimine del fichero , la frase azul tantas veces como aparezca, el único patrón que hay es la primera palabra STORAGE(INITIAL , y la última palabra 1) estas no siempre están en la misma línea, el resto de palabras que hay en el medio varían , por lo que me he visto obligado a pasar de SED y utilizar perl.

No soy ningun experto en perl , he hecho el script como lo hubiera hecho en C , tal vez ahí el problema, a continuación os muestro mi script.




#!/usr/bin/perl
my %hash;
open my $FICHERO, q[<], 'prueba.sql';
$s=0;
$i=0;
while (my $linea = <$FICHERO>) { #Abrimos while para linea
chomp $linea; #Eliminamos el último espacio
my @palabras = split " ", $linea; #Separamos en palabras

while ($s==0){ #Opción 1 del selector
if ( $palabras[$i] ne "STORAGE(INITIAL" )
{
print "$palabras[$i]\n";
print "estoy aqui $s\n";

$i=$i+1;
print "$i\n";
}
else
{
$s=1; #LLamamos la opcion 2
print "estoy en el else $s\n";

$i=$i+1;
}
}
while ($s==1){ #Opcion 2 del selector
if ($palabras[$i] ne "1)" ){
$s=1;
$i=$i+1;
}
else
{
$i=$i+1;
$s=0; #Invocamos la opción 1
}

}

}
close $FICHERO;
  #2 (permalink)  
Antiguo 10/07/2010, 08:51
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 14 años, 6 meses
Puntos: 7
Respuesta: Eliminar frases desde una palabra clave hasta otra,

Suponiendo que la palabra adelante de storage esta en la misma línea, debería de ser algo así, no?

Código:
open my $hd, 'tufichero.sql';
open my $pd, 'depurado.sql';

# Leemos todo el archivo a la variable mágica de Perl, necesitas tener memoría
read $hd, $_,-s 'tufichero.sql';

# eliminamos todas las lineas que tengan este patrón
s/^[\t \w]*STORAGE\s*\(\s*INITIAL.*?1\s*\)[^\n]*\n$//msiog;

# Guardamos el contenido modificado
print $pd;

close $hd;
close $pd;

Etiquetas: clave, eliminar, frases, palabra
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:55.