Non so rispondere a tutto quanto chiedi ... Comunque provo con qualcosa.
ora sembra esserci solo il problema dell'ultimo risultato, che accoda anche un sacco di altra roba
Te l'avevo detto che l'ultimo campo legge tutto, fino a fine stringa. Devi vedere cosa c'e` dopo il campo che ti interessa. Se c'e` uno spazio, modifica la RE cosi`:
codice:
/#(.*)\s+(.*)\s+(.*)\s+(.*)\s+?/
Prova con e senza il punto di domanda finale.
Se il carattere di fine stringa e` diverso, occorre capire qual e`.
Visto che in php sono 4 righe di codice, non esiste in perl un semplice equivalente di:
Che io sappia, quello che si fa in PHP si puo` fare anche in Perl. Il come e` una domanda che pero` esula dalle mie conoscenze (tra l'altro io non o mai usato PHP).
- carica un file da remoto
Si puo` fare (ma io non conosco la sintassi)
- tramite xpath ricava una lista di nodi
Non so cosa siano i nodi; forse in Perl sono chiamati in altro modo - sicuramente Shishii a questo sa rispondere (se hai fretta usa il bottone "segnala al moderatore", chiedendo una sua risposta)
- per ciascun nodo prelevo il suo valore stringa
Idem come sopra.
mi piace di più lavorare su html e dom a me. Che ne pensi?
personalmente mi pare una cosa inutile: in pratica fai aggiungere al file una serie di tag, che poi filtri per usare i dati. Pero` se il "tempo" e/o il "lavoro" dei computer non e` una variabile importante (per il tuo progetto), fai pure: in fondo e` il risultato che conta.
A proposito di lavoro dei computer ...
Gia` ieri lo avevo notato: nel tuo loop, tu ad ogni ciclo fai aprire e chiudere due file:" mi sembra un lavoro inutile. Ecco il tuo codice (commenti miei)
codice:
while($cont =~ m/#(.*) (.*) (.*) (.*)/g) {
open SCRIVI, ">>", $xchatdir."/ocebot.txt"; # apre file 1
open SCRIVI2, ">>", $xchatdir."/ocepack.txt"; # apre file 2
print SCRIVI "$2\n"; # scrive nel file 1
print SCRIVI2 "$1\n"; # scrive nel file 2
close SCRIVI2; # chiude file 1
close SCRIVI; # chiude file 2
Xchat::print("9,1___________________\n4,1Risultato .... ___\n");
$i++;
}
Ecco come invece farei io:
codice:
open SCRIVI, ">>", $xchatdir."/ocebot.txt"; # apre file 1
open SCRIVI2, ">>", $xchatdir."/ocepack.txt"; # apre file 2
while($cont =~ m/#(.*) (.*) (.*) (.*)/g) {
print SCRIVI "$2\n"; # scrive nel file 1
print SCRIVI2 "$1\n"; # scrive nel file 2
Xchat::print("9,1___________________\n4,1Risultato .... ___\n");
$i++;
}
close SCRIVI2; # chiude file 1
close SCRIVI; # chiude file 2
Credo che in questo modo acceleri di molto (probabilmente un fattore 10 o piu` - aprire e chiduere file sono procedure piuttosto lente).