Lecture d'un fichier.txt

MAZALEYRAT Messages postés 16 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 23 janvier 2008 - 10 déc. 2007 à 11:21
MAZALEYRAT Messages postés 16 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 23 janvier 2008 - 11 déc. 2007 à 12:51
Sujet : Probleme de lecture d'un fichier de type.txt avec PHP

Bonjour,
Je me casse la tête depuis quelques jours sur la lecture d'un fichier .txt (que me procure un client). Ce dernier est généré par un serveur selon un codage (à priori) incompatible avec php....
Le problème posé :
- j'utilise les fonctions habituelles et classiques de php pour l'ouverture du fichier, sa lecture et la récupération de l'ensemble des données
- le fichier .txt (client) comprend plusieurs variables que je "split" dans un tableau.
- lorsque je lis chacune des valeurs du tableau, il apparait des caractères bizarres (des ? pour être très précis) devant chaque lettre.
- en revanche, en avant de lancer mon petit programme, si j'ouvre le fichier original (client), que je fais un copier/coller dans un éditeur classique (type TextEdit sur Mac), que j'enregistre ce nouveau fichier .txt avec le même nom, là mon php fonctionne parfaitement.

Le but : parvenir à ouvrir et récupérer les infos correctement du fichier original .txt (client) sans avoir à faire de manipulations préalables sur le dit fichier.

Ben je ne sais si c'est tordu, compliqué, basique, hilarant pour les pros.... mais moi je m'y perds et j'ai épuisé toutes mes ressources... même après avoir parcouru des km de scripts, conseils et autres tutoriaux sur tous les sites dont je connais l'existence..... help me please !!!!!!!

le code de mon programme php :

<?php
$fichier = "test.txt";
$handle = fopen ($fichier, "rb");
$contenu = fread($handle, filesize ($fichier));
// je récupère les différentes variables du fichier en les "spitant" sur la particule "&"
$liste = preg_split("/[&]+/", $contenu);
//truc bizarre contenu dans l'entête du fichier client
$truc = $liste[0];
//Pour la variable numeromachine
$num = $liste[1];
$numeromachine = preg_split("/[=\n]+/", $num);
//Pour la variable nom
$nomtemp = $liste[2];
$nom = preg_split("/[=\n]+/", $nomtemp);
//Pour la variable deno
$denotemp = $liste[3];
$deno = preg_split("/[=\n]+/", $denotemp);
//Pour la variable gain
$gaintemp = $liste[4];
$gain = preg_split("/[=\n]+/", $gaintemp);
//Pour la variable date
$datetemp = $liste[5];
$date = preg_split("/[=\,]+/", $datetemp);
//Pour la variable heure
$heuretemp = $liste[6];
$heure = preg_split("/[=(\n)]+/", $heuretemp);
fclose($handle);
// Essai de print du contenu d'une des valeurs du tableau >>>>> voilà mon problème avec tous les ??????? qui apparaissent !!!!!!!
print_r($numeromachine);
?>

6 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
10 déc. 2007 à 15:54
0
MAZALEYRAT Messages postés 16 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 23 janvier 2008
11 déc. 2007 à 09:03
Merci de t'être penché sur mon problème... et merci pour la réponse apportée !
...malheureusement, après toute la nuit à chercher à mettre en place un script pour encoder mes valeurs en utf8.... ben rien à faire.... le résultat est toujours le même avec les mêmes "?" partout.... mais il se peut que je ne sache pas écrire correctement, et au bon endroit, cette ligne de code magique ! c'est désespérant de se prendre la tête sur des trucs aussi nuls et qui me bloquent pour tout le reste de mon développement.

Donc si il te reste encore un peu d'énergie et de temps à "perdre", je suis preneur d'une "intervention" plus en profondeur... avec ma reconnaissance éternelle, à défaut de dire "à charge de revanche"...sauf si en Flash je peux apporter mes quelques contributions !

Bonne journée.
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
11 déc. 2007 à 11:13
Salut,

Tu dis que t'as essayé, en vain, d'encoder en utf8... As-tu tenter de décoder, pour le cas où ce serait justement de l'utf8 ?

Tu dis qu'en copiant collant dans ton éditeur, ça fonctionne. C'est probablement que l'encodage d'origine du fichier est différent de celui que tu utilises.

Maintenant, il reste possible que ce problème d'encodage ne se voit qu'à l'affichage à l'écran. Dans ce cas, il faut veiller à uniformiser l'encodage de la page : soit tout en utf-8, soit tout en iso-8859-1.

L'encodage d'origine du txt, toi seul peut le voir. Je sais pas ce que vaut cet éditeur sous Mac, mais s'il est plus évolué que le notepad de windows, il devrait t'indiquer quel jeu de caractères est utilisé pour ce fichier : utf8 ou iso ?

Si tu affiches en iso et que le fichier est en utf8 => utf8_decode()
Si tu affiches en utf8 et que le fichier est en iso => utf8_encode()
Si le fichier et l'affichage sont tous les deux en utf8 (ou en iso) => normalement rien à faire : je doute que tu sois dans ce cas là.

Voilà ce que je peux dire pour l'instant...
0
MAZALEYRAT Messages postés 16 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 23 janvier 2008
11 déc. 2007 à 11:44
...coder... décoder... oui j'ai essayé tous les cas de figures
...mon écran/navigateur réglé aussi en utf8
...quand depuis php j'envoie les infos dans Flash, elles arrivent aussi avec tous ces fichus "???"

J'ai toutefois remarqué une chose : si tu regardes bien mon code php, il y a plusieurs étapes : d'abord la lecture des données, puis le spit des variables (avec la particule "&") puis le split des valeurs pour chaque variable (avec le saut de ligne \n). Si je fais un print sur la première étape, la donnée globale lue s'affiche correctement (intégralité du fichier texte)... mais passée cette première étape, et juste après le premier split (avec le "&") c'est à partir de là que ça déconne.

D'ailleurs, as tu essayé de lancer mon script .php depuis ton navigateur ? .. et si oui, constates tu toi sur ton écran le même phénomène ???? ... si oui c'est bien que mon code déconne....
Accès : www.hygienet.fr/test/test.php
Accès fichier texte de base : www.hygienet.fr/test/test.txt

Merci.....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
11 déc. 2007 à 12:36
Re,

C'est bien un problème d'encodage : ton fichier texte est en UTF-16

Si tu affiches ta page en UTF-16, t'as des caractères asiatiques (je saurais pas dire quelle langue, mais ce sont bien des idéogrammes).
Ton code n'a rien de transcendant, en ce sens qu'il ne fait rien sur les caractères. Donc ça ne vient pas de lui...

Par contre, c'est vrai que le fichier texte de ton client est un peu mal foutu...
0
MAZALEYRAT Messages postés 16 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 23 janvier 2008
11 déc. 2007 à 12:51
RE..... Effectivement le fichier original .txt de mon client est assez étrange, mais hélas je ne peux rien y faire ni changer... et la solution qui consisterait à le transformer à la main dans un éditeur ad'hoc est à exclure (la procédure doit se faire de manière automatique)... donc il ne me reste plus que la solution de trouver un moyen dans php pour résoudre ce problème....
Mais ce que je ne comprends pas c'est qu'avant de "spliter" les données lues, l'affichage se fait correctement, et dès que je split ça commence à déconner.... très bizarre....
D'après toi, existe-t-il une solution avec php pour lire ce p... de fichier source et le re-écrire en lieu et place avec un bon codage utf8 ?.... ce qui me permettrait tout de suite derrière de le lire à nouveau sans rencontrer ces fichus problème d'encodage UTF-16 ?
0
Rejoignez-nous