PDA

View Full Version : [PHP] Scrittura file


tidus8
07-05-2006, 17:51
Ragazzi mi serve un aiuto. Devo modificare una riga data in un file di testo...Come faccio a cancellare quella riga e riscriverla invece di cancellare e riscrivere l'intero file? Help me!!

Xalexalex
07-05-2006, 19:52
$array1=file($percorso_file);
array_map("trim",$array1);
$array_finale=array_diff($array1,$rigadatogliere);
$riga=implode("\n",$array1);
$fp=fopen($percorso,"w");
fwrite($riga);
fclose($fp);


Caput?

tidus8
07-05-2006, 20:33
No, non ho capito... :cry:

Xalexalex
07-05-2006, 20:58
No, non ho capito... :cry:
L'ho fatto apposta. :fagiano:

Scherzo...

Allora, con la funzione file() ti apre il file e te lo salva in un array, dove ogni array è una riga del file. Poi leva gli spazi all'esterno, da ogni riga, con "trim".
Fatto ciò, con array_diff, leva dal primo array il campo che corrisponde alla riga che vuoi togliere dal file. Dopo questo ancora, dall'array rimasto, crea una stringa che è l'incollaggio delle righe rimaste con un acapo. Poi scrive questa stringona sul file di partenza, aperto in "w" per cancellare il contenuto.

Spero di essere stato un po più chiaro :D

Ciauz,
Alex

tidus8
07-05-2006, 21:00
Perfetto, in pratica cambio la riga e riscrivo l'intero file....questo lo so fare, ma se il file cresce sostanzialmente??? Io volevo semplicemente spostare il puntatore alla riga giusta e riscriverla

Xalexalex
07-05-2006, 21:10
Sono un demente...
Mi sembrava dovessi solo cancellarla quella riga :fagiano:

Puoi usare il metodo di prima, però allungato.. Invece che fare array_diff, cicli tutto l'array con foreach, e quando trovi la riga che ti serve la sostituisci. Poi scrivi il file come sopra.
Spero di aver capito io stavolta..

tidus8
07-05-2006, 21:31
Non credo siamo ancora arrivati al punto....In questo modo io devo cmq riscrivere tutte le righe del file per modificarne una soltanto e questo non va bene. Io vorrei semplicemente scrivere quella interessata

Xalexalex
07-05-2006, 21:43
Per fare ciò che chiedi tu dovresti in pratica... leggere ogni riga con fgets, controllare se è quella che ti serve, e se è quella, tornare su di una riga col puntatore, cancellarla e riscriverla giust? Il problema è che non so come far tornare su di una riga il puntatore... A meno di non contare tutti i byte letti e poi tornare al punto con fseek...