Suppression ligne vide dans fichier texte

Eléphant du PHP | 97 Messages

21 mai 2012, 10:37

Bonjour,

j'aurai besoin de vous concernant l'amélioration d'une fonction qui lit la dernière ligne d'un fichier texte.
Tout d'abord, voici la fonction qui lit la dernière ligne de mon fichier :
function readLastLine ($file)
{
	$fp = @fopen($file, "r" );
	$pos = -1;
	$t = " ";
	
	while ($t != "\n" )
	{
		if (!fseek($fp, $pos, SEEK_END))// fseek returns 0 if successfull, and -1 if it has no succes as in seeking a byte outside the file's range
		{ 
			$t = fgetc($fp);
			$pos = $pos - 1;
		}
		else
		{ 
			rewind($fp); 
			break; 
		} 
	}
	$t = fgets($fp);
	fclose($fp);
	return $t;
}
Sauf que cette fonction me retourne une chaîne vide si la derniere ligne de mon fichier est une ligne vide.
Mon problème est donc le suivant :
-comment dire : si ce que ma fonction me retourne est une chaîne vide, tu supprimes la ligne et tu recommences ton travail tant que ta chaîne n'est pas vide ?

Merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mai 2012, 11:42

salut,

utilise file et boucle a l'envers sur le tableau ;)

@+
Il en faut peu pour être heureux ......

Sankokai
Invité n'ayant pas de compte PHPfrance

13 avr. 2016, 14:47

Si le fichier est très volumineux, la fonction file() n'est peut-être pas la plus appropriée:

Ajout d'une variable $line:

function readLastLine($file)
{
$fp = fopen($file, "r");
$pos = -1;
$t = " ";
$line = '';
while (($t != "\n") || (trim($line) == '')) {
if (!fseek($fp, $pos, SEEK_END)) {
// *** - fseek returns 0 if successfull, and -1 if it has no succes as in seeking a byte outside the file's range
$t = fgetc($fp);
$pos = $pos - 1;
} else {
rewind($fp);
break;
}
$line = fgets($fp);
}
fclose($fp);
return $line;
}

Mammouth du PHP | 1967 Messages

13 avr. 2016, 15:07

Tu participe au concours ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube