Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2007, 08h07   #1
Membre confirmé
 
Avatar de max44410
 
Étudiant
Inscription : juin 2003
Messages : 426
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2003
Messages : 426
Points : 259
Points : 259
Envoyer un message via MSN à max44410 Envoyer un message via Skype™ à max44410
Par défaut [CSV] Duplication de ligne anormale avc fgets

Bonjour,

Voila sur mon serveur Linux, j'ai un fichier avec une extention csv (file.csv).
ce fichier est generer par un script, une fois generer j'execute un script PHP qui le le fichier et le parse pour pouvoir entrer des information dans une base de donnee.

mon souci est le suivant. prenons un exemple du fichier :

Citation:
Ligne 45
Ligne 46
Ligne 47
Ligne 48
lorsque je le lis avec mon script PHP je fais comme ceci :
Code :
1
2
3
4
5
6
7
 
$file = '/home/file.csv';
$handle = fopen($file, "r");
while (($data = fgets($handle, 1000)) !== FALSE) 
	{
	echo $data.'<br>';
        }
seulement a un endroit du fichier et seulement un seul, il me duplique la ligne et je ne sais pas pourquoi. voila ce que j'obtiens :

Citation:
[...]
--------------------------
Ligne 45
--------------------------
Ligne 46
--------------------------
Ligne 46
Ligne 47
--------------------------
Ligne 48
--------------------------
[...]
j'ai verifier avec un editeur hexadecimal, et j'ai bien un caractere de nouvelle ligne (code hexa : 0A)

je ne sais pas du tout quoi faire ...
pour info ma version de PHP est la suivante : PHP Version 4.3.9

Voila .. merci d'eclairer ma lanterne

EDIT apres de nouveaux TEST, j'ai utilisé fgetc comme ceci :

Code :
1
2
3
4
5
6
7
while (($data = fgetc($handle)) !== FALSE)
	{
	if (strtoupper(bin2hex($data)) == '0A')
		echo $data.'<hr>';
	else
		echo $data;
         }
et je n'ai plus ma ligne en double. il y a donc bien un caractere de nouvelle ligne. Alors pourquoi fgets ne le detecte pas ??
__________________
Venez voir par là...
max44410 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2007, 08h25   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

Essaie de ne spécifier aucune taille de buffer :
Code :
while (($data = fgets($handle)) !== FALSE)
[edit]je n'ai pas eu le temps de voir ton edit :o)
PS : si tu as un gros fichier à parser, tu ferais d'utiliser fscanf qui est plus rapide.[/edit]
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h30.


 
 
 
 
Partenaires

Hébergement Web