Newsgroup: it.comp.www.php
Titolo: Sovrascrivere righe di un file

Ciao a tutti!
Ho la necessità di "isolare", all'interno di molti file tutti costruiti con
la stessa struttura, alcune righe, le uniche che mi interessano, buttando
via il resto. Esempio, in un file con quattro righe:
1 riga_a; //la butto
2 riga_b; //la tengo
3 riga_c; //la tengo
4 riga_d; //la butto
La fine della riga_a è sempre costituita dalla stessa sequenza di
caratteri, così come l'inizio della riga_d.
Pensavo che potrei usare il php per questo scopo. Ma come potrei fare?
Ho visto delle funzioni che trovano una stringa in un'altra stringa, delle
altre che scrivono una stringa all'interno di un file, ma io ho bisogno di
cancellare due interi blocchi del file fino a delle sequenze di caratteri
ben precise. Esiste un modo per poterlo fare?
Ringrazio fin da ora chiunque potrà aiutarmi,
Rocky3
-- 
"Il sapere e la ragione parlano, l'ignoranza ed il torto urlano".
Arturo Graf / Indro Montanelli / Anonimo

 ben precise. Esiste un modo per poterlo fare?
Se il file non è troppo grande (valuta tu), puoi semplicemente
inserirlo tutto in una variabile stringa, usando la funzione
file_get_contents().
Quindi puoi individuare le posizioni che ti interessano usando
strpos(), rimuovere le parti che non desideri usando substr() e infine
salvare nuovamente il file con file_put_contents().

 file_get_contents().
Può essere un'ottima idea!
Dipende, però, dalla grandezza massima tollerata per una variabile stringa.
Ho visto degli esempi di file e sono attorno ai 40 KB, qualcuno di meno,
qualcuno di più.
Può essere davvero troppo?
Grazie!


 Può essere un'ottima idea!
se devi lavorare su righe forse file() è più adatta
-- 
doh!

 di meno, qualcuno di più.
40 Kb e` una miseria! Vai tranquillo. :)
"Tanto" e` da 1 MiB in su (poi dipende dalla potenza del processore e 
dalla RAM disponibile).
Sicuramente hai prestazioni migliori caricando tutto in RAM e usando 
operazioni della libreria base che non leggerlo un pezzo alla volta ed 
elaborarlo in PHP con confronti carattere per carattere.
Bye.

 40 Kb e` una miseria! Vai tranquillo. :)
Perfetto! :-)
Ho provato a scrivere il codice, e tutto funziona finché non scrivo, alla
linea 10,
$exit = file_put_contents("file.php", $grezza);
dove $grezza contiene la stringa modificata (accorciata). L'errore è
Fatal error: Call to undefined function: file_put_contents() in
/var/www/htdocs/aziende/chiesamarche/migrazione.php on line 10
come se il php non conoscesse file_put_contents(). La versione php
installata è la 4.3.9. Possibile che non la riconosca o c'è dell'altro?
Grazie per il vostro aiuto!


 se devi lavorare su righe forse file() è più adatta
Può essere un'ottima idea, ma i file sono piccoli e su consiglio di
Alessandro Pellizzari ho pensato per ora di usare le stringhe... e tutto
funziona... tranne una cosa! Ho scritto un post in risposta facendo vedere
il codice che genera il problema.


 Grazie per il vostro aiuto!
file_put_contents richiede PHP 5. Quindi con il 4 non funziona.
...ecco un'altra ragione per abbandonare il 4, e passare al 5...tanto
il 4 ha i giorni ormai contati.
Se proprio sei nostalgico e attaccato al 4, devi usare, in sequenza, le
funzioni fopen(), fwrite(), and fclose() per ottenere lo stesso
effetto.
-- 
rob4you
www.outofmind.eu