loulou Posté 25 Janvier 2006 Posté 25 Janvier 2006 (modifié) Bonjour, J'ai un problème avec un fichier texte. Je récupère des lignes qui sont constituées de champs séparés par des tabulations. Pour récupérer ces champs je fais : while ($data = fgetcsv ($fp, 4096, "\t","\r\n")) { $champs0=$data[0]; ........ } Cela marche très bien, sauf pour certains champs qui correspondent à des prix et qui ont la forme : 193,78 par exemple. Pour ce type de champs, avec mon code actuel, je récupère 193,7. J'ai essayé de faire ($data[x]*100), mais cela me donne : 19300. Là encore la décimale n'est pas prise en compte. J'ai essayé de faire $dta=(ereg_replace(",", "", $data[x])); (suppression de la virgule dans la chaine, mais là encore, j'obtiens 1937. (il manque le 8 à la fin de ma chaine). Avez-vous une idée de la procédure à suivre ? Merci ---------- edit modérateur: modifié la faute dans le titre ;-) Modifié 25 Janvier 2006 par Dudu
NorSeb Posté 25 Janvier 2006 Posté 25 Janvier 2006 Bonjour, Où sont situés ces fameux champs sur la ligne ? A la fin ?
loulou Posté 25 Janvier 2006 Auteur Posté 25 Janvier 2006 Non ils y en a 2 qui se suivent et ils sont en position 3 et 4 sur 7, en partant de 0. C'est donc $data [3] et $data [4] dasn ma boucle.
NorSeb Posté 25 Janvier 2006 Posté 25 Janvier 2006 Bizarre... Essaye avec la fonction list peut-être ?
loulou Posté 25 Janvier 2006 Auteur Posté 25 Janvier 2006 Je ne connais pas bien cette fonction, je vais essayer.
loulou Posté 25 Janvier 2006 Auteur Posté 25 Janvier 2006 Je viens de regarder cette fonction, mais je ne vois pas bien comment l'utiliser dans mon code.
NorSeb Posté 25 Janvier 2006 Posté 25 Janvier 2006 while ($data = fgetcsv ($fp, 4096, "\t","\r\n")){list ($champ1, $champ2, ..., $champn) = $data;} ou bien while (list($champ1, $champ2, ..., $champn) = fgetcsv ($fp, 4096, "\t","\r\n")) {// Ton traitement}
loulou Posté 25 Janvier 2006 Auteur Posté 25 Janvier 2006 Merci NorSeb. J'ai appliqué la première méthode que tu m'as donné, et cela a fonctionné. Mais pour ne ne sais quelle raison, je n'ai toujours pas le 2nd chiffre après la virgule. Je ne vois vraiment plus comment faire. Si quelqu'un a une idée ?
NorSeb Posté 25 Janvier 2006 Posté 25 Janvier 2006 J'ai lu que la fonction fgetcsv utiliserait les spécifications de Excel... Je ne sais quoi en penser. Toujours est-il que tu ne risque rien à tenter une autre solution, du genre : while (!feof($fp)) {$ligne = fgets($fp);list($champ1, $champ2, ...) = explode("\t", $ligne);// Ton traitement}
loulou Posté 25 Janvier 2006 Auteur Posté 25 Janvier 2006 Et bien je n'y comprends plus rien. Après avoir essayé la fonction "list", j'ai rééssayé mon code du début : et là miracle ça marche ! Je ne sais pas si c'est moi qui ne voyais rien ou si j'ai modifié quelque chose dasn mon code en faisant les divers tests que tu m'as conseillés. Je pense que c'est la première solution la bonne... En tout cas merci pour ton aide !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant