Newsgroup: it.comp.www.php
Titolo: Togliere spazi alla fine di un file

ciao a tutti,
premetto che conosco già trim :)
Avrei necessità, dato un file, di eliminare le eventuali righe vuote,
o contenenti spazi bianchi che sono dopo l'ultima riga con qualche
cosa. Esempio:
1: "1234567890"
2: "0987654321"
3: "    "
4: \n
5: \t
come posso fare per eliminare le righe n.3, 4 e 5 senza scandire il
file riga per riga (può essere di centinaia di migliaia di righe...)?
grazie mille!

 file riga per riga (puņ essere di centinaia di migliaia di righe...)?
in questa pagina trovi tra gli esempi degli utenti delle implementazioni
di tail tramite fseek:
http://de2.php.net/manual/en/function.fseek.php
potresti fare un tail incrementale finchč non trovi una
riga non vuota.
a quel punto troncare il file a tale riga con ftruncate

 a quel punto troncare il file a tale riga con ftruncate
Ti ringrazio. Comunque mi sembra un po' farraginosa come strada...
Veramente non c'è una funzione che già implementa il controllo di
linee vuote alla fine di un file? Incredibile..
ciao!
Luk

 linee vuote alla fine di un file? Incredibile..
A me sembrerebbe strana una funzione così specifica.



e una funzione che toglie da un file tutte le filastrocche come la vedi?
:)

 Luk
In PHP trovi delle funzioni che ti dicono quando hai raggiunto la fine
della riga e ti mettono il contenuto della riga appena letta in un
array, sta poi a te decidere cosa farne e come verificarle.
Non è sufficiente?
Max
-- 
http://www.maxori.it
L'Arte è la capacità di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 F. Zappa
Si, ma è che alla fine non riesco a fare quello che voglio. Ad es. il
seguente codice dovrebbe togliere le righe vuote in fondo al file,  ma
non lo fa,... perché?
$search  = array(" ","\r\n","\r"," \n");
$replace = "";
$userfile = str_replace($search, $replace, $userfile);
grazie

 $search  = array(" ","\r\n","\r"," \n");
Le mie doti di veggente mi suggeriscono che il responsabile è quello 
spazio bianco prima del newline.
Chiaramente conoscere il contenuto di $userfile nella prova che dici non 
funzionare aiuterebbe.

 grazie
Mi ricordo che ho avuto anch'io questo problema e lo avevo aggirato con
questo tipo di codice:
$files = array();
$myFile = fopen($fileName, "r");
  $contents = "";
  while(feof($myFile)==FALSE) {
  array_push($files,fgets($myFile, 1024));
}
fclose($myFile);
A questo punto dentro a $files[] hai tutte le righe del file e le puoi
manipolare come stringhe.
Se ti può essere utile..
Max
-- 


 contenenti spazi bianchi che sono dopo l'ultima riga con qualche cosa.
Un paio di algoritmi farlocchi:
- leggi tutto il file in una stringa, e poi usi trim()
- apri il file con file(), poi inverti l'array con array_reverse(), quindi 
fai un foreach che elimina gli elementi dell'array. Esci dal foreach con 
break quando trovi qualcosa di diverso dai blank, quindi ri-array_reverse
() e poi scrivi il file.
Uno un po' piu` furbo: apri il file, usi fseek() per riavvolgerlo di 1 KB, 
ti carichi in RAM il pezzo finale, quindi lo analizzi a partire dalla fine 
e usando ftruncate() quando non ne trovi piu` lo tronchi direttamente su 
disco. Ripetere se non trovi caratteri validi nel KB che hai caricato.
Non ricordo se fseek() e` buffered, nel qual caso puoi usare direttamente 
lei e riavvolgere di un carattere alla volta.
Bye.