PDA

Visualizza la versione completa : File di testo


Teo80
19-02-2007, 21:31
Ciao a tutti,
mi scuso se la domanda potrà essere banale, ma non ho molta esperienza con il perl. Ho un file di testo e devo fare in modo di scrivere la parte successiva ad una data riga (il cui valore ho in una stringa) in un altro file di testo.
La soluzione che mi è venuta in mente è banalmente quella di scorrere tutto il file comparando ogni riga con la stringa e dal punto in cui trovo la corrispondenza scrivere riga per riga nel secondo file di testo:

open POINT_FILE, "<$pointer_file";
open INP_FILE, "<$input_file";
open APP_FILE, ">$app_file";

$puntatore = <POINT_FILE>;
@righe_log = <INP_FILE>;
$nr_rec = scalar(@righe_log);
$start = "ko";

foreach $linea(@righe_log)
{
if ($start eq "ok"){
print APP_FILE $linea;
}
if ($linea eq $puntatore){
$start = "ok";
}
}

So che il perl è famoso per la manipolazione delle stringhe, per cui mi chiedevo se magari esisteva un metodo più furbo ed elegante.
Grazie!

MARTEDI
20-02-2007, 09:56
puoi fare un piccolo esempio di quello che vuoi ottenere?

Mi sembra di capire che la parte che vuoi aggiungere è su alcune righe e non su tutte, ma non ho capito bene con quale criterio. Se sai il numero delle righe che vuoi modificare potresti trasformare le righe del file in un array, modificare le stringhe nelle posizioni dettate dal numero delle righe e poi ricreare il file ...

Teo80
20-02-2007, 14:43
Ho un file di testo e vorrei copiare la seconda parte del file (da una data riga che trovo per comparazione con una stringa) in un altro file di testo

MARTEDI
20-02-2007, 15:59
decisamente poco diversa da quella che faresti tu!
Ci sono dei veri esperti qui nel forum. Credo che qualcuno ti potrà proporre una funzione alternativa, migliore!
Comunque:

open (POINT_FILE, "<$pointer_file");
$puntatore = <POINT_FILE>;
close (POINT_FILE);

$start=0; #come il tuo ko, ok
open (APP_FILE, ">$app_file");
open (INP_FILE, "<$input_file");
while (<INP_FILE>)
{
if ($linea eq $puntatore)
{$start=1}
if ($stat==1)
{print APP_FILE $_}
}
close (INP_FILE);
close (APP_FILE);

MARTEDI
20-02-2007, 17:39
dentro il ciclo di while:
if ($stat==1) -> "stat" deve essere naturalmente "start"!

Teo80
20-02-2007, 22:58
ok, grazie, avevo comunque capito

Loading