Devo gestire dei file di testo. In primo luogo ho la necessita' di eliminare le doppie righe vuote e sostituirle con una sola riga... come faccio? Inoltre, mi piacerebbe sapere se e' possibile estrarre solo le prime 3 righe.
Devo gestire dei file di testo. In primo luogo ho la necessita' di eliminare le doppie righe vuote e sostituirle con una sola riga... come faccio? Inoltre, mi piacerebbe sapere se e' possibile estrarre solo le prime 3 righe.
per le prime tre righe
per eliminare le doppie righe nuove invece devi fare un ciclocodice:<?php $handle = fopen("file.txt", "r"); $n = 0; while (!feof($handle) && $n < 3) { $buffer[] = fgets($fd, 4096); ++$n; } fclose($handle); ?>
codice:$lines = file("file.txt"); $new_lines = array(); foreach($lines as $key=>$line) { if(trim($line) == '' && isset($lines[$key+1]) && trim($lines[$key+1]) == '') { continue; } else { $new_lines[] = trim($line); } } $fd = fopen("file.txt", "w"); fwrite($fd, implode('\n', $new_lines)); fclose($fd);
E' la mia opinione ed io la condivido
Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
Scrivi sul muro
Grazie, sembra funzionare. Pero' noto che l'output mi inserisce i caratteri ascii "\n", invece di andare a capo.
Aggiungo anche una domanda,
del ciclo:
Mi stampa una riga in piu' che non riesco a strippare in nessun modo. Alla fine della listaCodice PHP:
$src = file_get_contents("file.txt");
$lines = explode("\n",$src);
for($i=0;$i<count($lines);$i++){
echo $i.$lines[$i]."
";
}
uno
due
tre
rimane qualcosa che crea un linea in piu'...
Io volevo avere in output una cosa tipo:
[uno] due->
<-uno [due] tre->
<-due [tre]
In pratica quelli nella lista sono nomi di file, io dovrei creare una specie di navigazione avanti e indietro. Ovviamente i file non si chiamano uno due treIo ho fatto:
Codice PHP:
$num = count($lines);
if($i < 1){
$line = "<a href=\"index.html\">Indice</a> | ";
$line.= "<a href=\"".$src[$i+1].".html\">Avanti</a>";
}elseif($i > $num){ #qui ho provato anche con >= =
$line = "<a href=\"".$src[$i-1].".html\">Indietro</a>";
$line.= " | <a href=\"index.html\">Indice</a>";
}else{
$line = "<a href=\"".$src[$i-1].".html\">Indietro</a>";
$line.= " | <a href=\"index.html\">Indice</a> | ";
$line.= "<a href=\"".$src[$i+1].".html\">Avanti</a>";
}
echo $line.$num;
echo "</p>\n\n<hr/>\n\n";
per sistemi unix/linux \n
per sistemi windows \n\r
per sistemi mac \r
quindi devi modificare lo script a seconda del sistema che utilizzi
utilizzare file_get_contents in combinazione con explode è lo stesso che utilizzare direttamente file(nomefile) stando attenti ad eliminare l'accapo (vedi sopra) o altri simboli con trim quando si utilizza il nome
per quanto riguarda l'ultima riga, probabilmente dipende proprio da un accapo posto alla fine del file
ricreandoti l'array in questo modo
non dovresti avere più questi problemicodice:$lines = file("file.txt"); $the_array = array(); foreach($lines as $val) { if(trim($val) != '') { $the_array[] = trim($val); } }
per quanto riguarda la navigazione non ho capito bene.
Forse intendi questo?
però non so dove prenda $icodice:$lines = file("file.txt"); $the_array = array(); $key = 0; foreach($lines as $line) { if(trim($line) != '') { $the_array[] = trim($line); } } echo (isset($the_array[($i-1)]) ? "<a href=\"".$the_array[($i-1)].".html\">Indietro</a> | " : ""). "<a href=\"index.html\">Indice</a>". (isset($the_array[($i+1)]) ? "<a href=\"".$the_array[($i+1)].".html\"> | Avanti</a>" : "");
E' la mia opinione ed io la condivido
Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
Scrivi sul muro
Sei stato molto gentile e hai anche indovinato. $i viene dal ciclo for di sopra.![]()