Suppression ligne vide

Eléphant du PHP | 121 Messages

13 Mai 2009, 15:41

Bonjour,

Je suis en train de travailler sur le reformatage d'un fichier .csv avec les fonctions de fichiers de PHP.
J'aimerai pouvoir supprimer dans mon script les lignes vides du fichier .csv...mais je ne trouve pas la solution.

Voici mon script :
[php]
$newfile="monfichier.csv";
$creation = fopen($newfile, "a");
// Boucle ouverture du fichier
while (!feof($fp))
{
// On affichage chaque ligne du fichier
$ligne = fgets($fp,4096);
// Formatage de chaque ligne en enlevant le blanc de fin de ligne
$ligne2 = rtrim($ligne);
if($ligne2!="")
{
fputs($creation, "$ligne2\r\n");
}
}
fclose($fp);
fclose($creation);
[/php]

J'ai essayé de supprimer les lignes vides avec :
[php]if($ligne2!="")
{
fputs($creation, "$ligne2\r\n");
}[/php]...mais cela ne marche pas :(

Une idée ?
Bisvan :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 10009 Messages

15 Mai 2009, 14:22

hmm... quand tu dis que "ça ne marche pas", qu'est ce qui ne fonctionne pas ? as-tu vérifié la valeur de $ligne2 sur les différentes lignes à exclure et à conserver ?

Ce n'est pas parce qu'une ligne ne contient pas de données dans excel, que celle-ci est vide dans le fichier csv... ouvre ton fichier csv avec un éditeur de texte (bloc note ou autre). Tu verras que les lignes qui apparaissent vides contiennent en fait tous les séparateurs de champs, chaque champ étant quant à lui vide :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 121 Messages

15 Mai 2009, 18:46

Oui c'est bien cela le problème.
j'ai des lignes dans mon CSV sans résultat que j'aimerai "faire disparaitre".
Or avec mon script ces lignes vide (sans résultat mais avec un saut de ligne) restent présentes.

Aurais tu une idée ?
Bisvan :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 10009 Messages

16 Mai 2009, 11:59

Ouvre ton fichier csv dans un bloc note pour voir à quoi il ressemble réellement... tu verras que tes lignes "vides" sont en fait une suite de point-virgules (séparateurs de champs)

Il ne te faut donc pas tester si ta ligne est vide avec php, mais si celle-ci ne contient que des ";", ce que tu peux faire assez simplement avec une expression régulière : #^;*$#. Si c'est le cas, tu pourras supprimer cette ligne, sinon tu la laisses :)

Mais commence par ouvrir ton fichier avec le bloc note pour voir à quoi il ressemble réellement. C'est important de voir le format des données que tu manipules, et ça te simplifieras la vie :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 121 Messages

16 Mai 2009, 12:49

En fait la ligne dont je parle est la dernière ligne de mon fichier CSV et elle ne comporte pas de ";".
Elle est simplement vide (le curseur peut se positionner dessus).
Comment la supprimer ?
Bisvan :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 10009 Messages

16 Mai 2009, 16:35

Au temps pour moi ! :)

Ta dernière ligne vide provient du dernier "\r\n" que tu mets dans ton fichier et qui du coup va créer une ligne vide tout à la fin. Pour éviter cela, il ne faut pas mettre le retour à la ligne systématiquement. Le plus simple est de le mettre en début de ligne à condition de ne pas être sur la première, ce que tu peux vérifier avec un compteur :

[php]$cptLigne = 0;
while (!feof($fp))
{
// On affichage chaque ligne du fichier
$ligne = fgets($fp,4096);
// Formatage de chaque ligne en enlevant le blanc de fin de ligne
$ligne2 = rtrim($ligne);

if ($cptLigne > 0) // si on est pas sur la première ligne, on créer une nouvelle ligne
fputs($creation, "\r\n");

fputs($creation, $ligne2); // on ajoute le contenu de la ligne

$cptLigne++; // incrémente le compteur
} [/php]
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

19 Mai 2009, 19:18

Bonjour a tous,

Tu as réussi à supprimer une ligne blanche ? Moi j'aimerai tout simplement les supprimer dans un fichier texte.

Merci pour votre aide