Newsgroup: it.comp.www.php
Titolo: modificare file di testo

Salve a tutti!
Ho un problema: vorrei poter modificare un file di testo scritto con un file
in php con dati raccolti da un form:
una volta che compilo il form, lo invio e il file php mi scrive il file di
testo. Vorrei sapere se è possibile correggere le stringhe scritte nel file
di testo senza riscriverlo completamente....
Spero di essermi spiegato...
Grazie a tutti
Andrea - Trieste

 ha scritto nel messaggio
news:8wOT7.18018$OP2.6...@news2.tin.it...

uhmmm.... non penso, mi sa che ti tocca leggere il file, apportare le dovute
modifiche e riscrivere il file...
al massimo quello che potresti provare a fare è posizionarti in un punto del
file e scriverci dentro, ma non so se è possibile anche questo...
Ciao
Alex

 file e scriverci dentro, ma non so se è possibile anche questo...
Credo che la soluzione piu' pratica sia quella di usare la sintassi 
"here doc" per le stringhe per costruire una sorta di template del file 
di testo. Se fai una roba di questo tipo:
$template = <<< FINETEMPLATE
Questo e' il contenuto del file di testo.
Questa $parola viene sostituita con il valore della variabile globale 
\$parola.
FINETEMPLATE;
puoi scrivere direttamente $template nel file di testo (le variabili 
vengono espanse automaticamente come nella normale sintassi "...").
Ciao
-- 
Luca Balzerani
http://www.LatoServer.it

 nel file di testo senza riscriverlo completamente....
certo!!
apri il file con fopen in read/write.
leggi il file o le parti di file che ti servono.
la scrittura e gli spostamenti funzionano proprio come in C:
(vedi sintassi su manuale)
fseek(): sposta il puntatore
ftell(): ritorna la posizione del puntatore
fread(): legge, anche solo n bytes
fwrite(): scrive, anche solo n bytes
feof(): testa la fine del file
in questo modo, posso scrivere anche solo 10 bytes partendo dal byte 3 al 
byte 12!!
0.................................feof()
 --°''''''''^---------------------
ciao

 ha scritto nel messaggio
news:Xns917C5E5B58...@10.16.96.46...


 byte 12!!
ma il problema resta un'altro...
come faccio a sapere a quale byte si trova la parola "ciao" in un mega file
di testo ?
Alex

 file di testo ?
come faresti in un mini file di testo!!
ci mette solo un po' di più!!
sempre meglio di leggere tutto il file in memoria e poi riscriverlo tutto!
ciao

 ha scritto nel messaggio
news:Xns917CA7ECEF...@10.16.96.46...

Beh non so neanche come si fa a leggere "ciao" in un mini file di testo :-)
Esempio di file:
qui scrivo del testo e poi
vado a capo a questo punto
dico ciao e finisco di scrivere
Come faccio a sapere che la parola "ciao" si trova sulla terza fra carattere
6 (c) e 9 (0) ??
con fseek posso cercare solo all'interno del file la posizione di N byte...
ma come faccio a sapere a che byte si trova una parola/stringa ?
Ciao
Alex

In 9Q7U7.20181$
o9.7...@news1.tin.it
, Alessio,


Se non hai l'esigenza stringente di leggere riga per riga puoi fare così:
<?php
    $file = "test.txt";
    $fp = fopen($file, "r");
    $testo = fread($fp, filesize($file));
    $pos = strpos($testo, "ciao");
    if($pos):
        fseek($fp, $pos);
        $testo2 = fread($fp, filesize($file));
        echo $testo2;
    endif;
 
?>
Il file "test.txt" che ho usato io contiene esattamente le tue righe:
    "qui scrivo del testo e poi
    vado a capo a questo punto
    dico ciao e finisco di scrivere"
L'output del mio script sarà:
    "ciao e finisco di scrivere"
Se invece vuoi per forza leggere il tuo file riga per riga c'è da fare
qualche piccola modifica. Naturalmente puoi sempre decidere di complicarti
la vita e usare le RegExp PCRE: in pratica prendi il fucile per ammazzare
una zanzara :-)
:) Roberto

> ma come faccio a sapere a che byte si trova una parola/stringa ?
PS - Lo scriptino che ho postato restituisce anche l'offset della stringa
che cerchi. Nel caso tuo la parola "ciao" si tropva esattamente a 59 bytes
dall'inizio del file, e il valore lo trovi nella variabile "$pos".
ri_ciao
Roberto