Con dividir, me refiero a que partas el
array con las líneas a procesar, en varios
array, según lo que tengas que procesar.
Algo así como hacer la exp. reg. en un bucle anterior. De esa manera, en los bucles principales te ahorras poner excepciones, porque han quedado fuera.
Para procesar líneas de un archivo entre dos condiciones, lo más cómodo es usar el operador flip-flop:
Using perl Syntax Highlighting
while (<leemos línea del archivo
>) {
if (/linea con1/ .. /linea con2/) {
# aquí procesamos líneas para con1
}
if (/linea con2/ .. /linea con3/) {
# lo mismo, para con2
}
if (/linea con3/ .. eof) {
# aquí procesamos desde con3 hasta el fin de archivo
}
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Ahora bien... no nos dices cuántos conX hay... ¿lo sabemos? Si no, pues habrá que usar una exp. reg.
Yo haría entonces algo así:
Using perl Syntax Highlighting
my %cons; # aquí guardamos las líneas, indexadas por el nombre del conX.
my $con_actual = "ninguno";
while (<$archivo>) {
if (/^linea (con\w+)/) { # en caso de ser una línea con conX, capturamos su nombre
$con_actual = $1; # la recordamos
next; # leemos la siguiente línea
}
push @{$cons{$con_actual}}, $_; # si es una línea normal, la almacenamos en un array indexado por el nombre de la conX.
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y al final tenemos un
hash cuyas claves son los nombres de las conX, y los valores son referencias a
array, que guarda una línea por cada línea del archivo dentro de la sección conX.
Y ya puedo procesar %cons, sabiendo que tengo todas las zonas separadas.