Hola,
Primeramente felicitar a los usuarios de este foro, siempre os he utilizado como guía 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 líneas 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). Éstas 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 ningún 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.
Using perl Syntax Highlighting
#!/usr/bin/perl
$storage="STORAGE(INITIAL";
$fin="/)";
$s=0;
$fichero=shift;
open FICHERO, $fichero or die "ERROR: No encuentro el fichero texto.txt\n";
@lineas = <FICHERO> or die "ERROR: No puedo leer el fichero\n";
close FICHERO or die "ERROR: No puedo cerrar el fichero\n";
for ($i=0; $i <= @palabras; $i++){
@palabras = split (' ',@lineas[$i]);
print "@palabras\n";
while ($s=0)
{
if (@palabras[$i] == $storage)
{
print @palabras[$i];
print "@palabras[$i]\n";
}
else
{
$s=1;
}
}
while ($s=1)
{
if (@palabras[$i] != $fin)
{
$s=1;
}
else
{
$s=0;
}
}
}
Coloreado en 0.005 segundos, usando
GeSHi 1.0.8.4
Muchas gracias de antemano,
Un saludo,
Alex