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 26/09/2007, 11h54   #1
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Par défaut Problèmes Ecriture dans Fichiers Texte

Bonjour,

Voila depuis ce matin, j'essaye de comprendre le pourquoi du comment mon ecriture dans un fichier texte ne fonctionne pas.

En effet, je dois générer deux fichiers textes qui vont être utilisés par une application en aval.
L'application reconnait les fichiers textes selon le formatage suivant :

LIGNE 1 : DONNEE1[TABULATION]DONNEES2[TABULATION] ....
LIGNE 2 : DONNEE3[TABULATION]DONNEES4[TABULATION] ....

Les données de ces fichiers textes sont issues d'une BD MySQL, j'ai donc crée un script PHP qui écrit dans ceux-ci.

Le problème est que sur les deux scripts mis en place, un seul fonctionne alors qu'il me semble que les deux sont identiques.
Je souhaiterai savoir si par ces deux scripts je met bien en place ce que je souhaiterai.

Je vous présente mon code :

Premier code

Code :
1
2
3
4
5
6
7
8
9
10
 
while($data = mysql_fetch_array($req)) 
{
      for($i = 0;$i<=$taille - 1;$i++)
      {
               $donnee = $data["$write[$i]"];					 
               fwrite($myfile,$donnee."\t");				
      }
      fwrite($myfile,"\r\n");
}
$write est un ARRAY qui contient l'ensemble des champs issus de la BD. $taille est la taille du tableau.

Deuxieme code (moins optimisé) :

Code :
1
2
3
4
5
6
 
$text = $data['champ1'].'	'.$data['champ2'].'	'.$data['champ3'].' ...
$saut="
";
 
fwrite($myfile,"$text $saut");
$text recoit en fait la ligne a ecrire avec les tabulations comme séparation entre les données.

A mon sens, je créer par ces deux scripts deux fichiers identique, or l'un est différents de l'autre puisqu'il n'est pas exécuté par mon application. Une autre hypothese, cela peut-il venir de mes données MySQL ??

MERCI POUR VOS REPONSE !!

Cordialement
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 11h58   #2
Membre éclairé
 
Avatar de Inazo
 
Gérant - société de développement web
Inscription : avril 2007
Messages : 290
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Gérant - société de développement web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2007
Messages : 290
Points : 360
Points : 360
Bonjour à toi,

Ca va te paraître idiot mais le fopen il est ou ?

Cordialement Inazo.
Inazo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 12h05   #3
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Bonjour,

J'ai donné le code de la partir simplement ECRITURE dans le fichier d'ou la présence unique du fwrite !

Pour information, voici l'ouverture et la fermeture du fichier :

Ouverutre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
fopen("C:\Program Files\Gen_LABO\Lignées.txt","w+"); 
 
$file = ("C:\Program Files\Gen_LABO\Lignées.txt");
 
if(!$myfile = fopen($file, "w+"))     
{
print("erreur: ");
print("'$Fichier' n'existe pas!\n");
exit;
}
Fermeture :

Code :
1
2
3
 
fclose($myfile); 
chmod ("C:\Program Files\Gen_LABO\Hybrides.txt", 0777);
MERCI

PS : EDIT des deux posts désolé
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 12h08   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
J'ai pas vraiment compris le probleme je dois dire... par contre une ligne m'interpelle, je me dis que le probleme est peut etre juste ca. Il faut remplacer
Code :
$donnee = $data["$write[$i]"];
par
Code :
$donnee = $data[$write[$i]];
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h09   #5
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
En fait, je pense que les tabulations ne sont pas prise en compte en fonction de l'un ou l'autre code !

Je fais des test en prenant en compte ta remarque.

Je veux aboutir en fait, a un fichier texte contenant des lignes de données dont sur chaque lignes, chaques données doit être separés par une tabulation.

Mes données sont extraites d'une vue Mysql, autant dire le fichier est préformaté dans la BD puisque je fais un SELECT *, me reste plus qu'a organise ligne par ligne et colonne par colonne sur le fichier texte.

En testant, ces deux codes j'arrive à ecrire mais il me semble que l'organisation n'est identique en fonction des deux puisque avec l'un l'application qui prend en compte ces fichiers l'execute et avec l'autre elle genere une erreur.

Cordialement
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h10   #6
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Bonjour,

Et ça ne serait pas suffisant (outre l'ouverture du fichier et la requête sql, si $req en est bien le résultat) ?
Code :
1
2
3
4
5
6
  while ($data = mysql_fetch_array($req))
  {
    $ligne = implode("\t", $data) . "\r\n";
    fwrite($myfile, $ligne);
  }
  fclose($myfile);
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h21   #7
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Bonjour,

Merci attend je test !

JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h23   #8
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
J'ai pas réfléchi, lors du SELECT * et suivant ta technique, cela ne me met pas les colonnes dans l'ordre que je souhaite !
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h33   #9
Membre du Club
 
Inscription : octobre 2004
Messages : 42
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2004
Messages : 42
Points : 40
Points : 40
Envoyer un message via MSN à MicroAlexx
Bonjour,

Citation:
Envoyé par JmL40 Voir le message
Code :
1
2
3
4
5
6
 
$text = $data['champ1'].'	'.$data['champ2'].'	'.$data['champ3'].' ...
$saut="
";
 
fwrite($myfile,"$text $saut");
deja, est-ce lui qui bug ?

si oui pourquoi ne pas mettre :

Code :
1
2
3
 
$text = $data['champ1']."\t".$data['champ2']."\t".$data['champ3']. ...;
$saut = "\r\n";

certain éditeur de text remplace les tab par des espace, ca pourrai etre le pb.

Cordialement,
MicroAlexx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h36   #10
Membre du Club
 
Inscription : octobre 2004
Messages : 42
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2004
Messages : 42
Points : 40
Points : 40
Envoyer un message via MSN à MicroAlexx
Enfait je remarque pas mal de petite chose, comme le chemin du fichier par exemple.

Pourrai-tu poster les 2 scripts entier (ou au moins toute la partie concernée)

Merci.
MicroAlexx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h38   #11
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
Bonjour,

Non justement c'est l'autre qui bug, je vais tester ta solution !

MERCI POUR TON AIDE

Il faut que je regarde précisement toute l'organisation de mes données car surement que j'oublie une tabulation ou qu'il en manque etc !

MERCI

Cordialement
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h38   #12
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Dans ce cas, tu modifie ta requête :
Code :
select leChamp1QueTuVeux, leChamp2QueTuVeux, etc.
D'autre part, il faut modifier cette ligne :
Code :
 while ($data = mysql_fetch_array($req))
comme suit :
Code :
  while ($data = mysql_fetch_array($req, MYSQL_NUM))
Mais il y a une solution directement avec la requête. Fait une recherche sur 'into outfile' dans cette page :
http://dev.mysql.com/doc/refman/5.0/fr/select.html
Mais cette solution ne fonctionne pas chez tous les hébergeurs.
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 13h54   #13
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Un exemple avec le lien que je t'ai donné :
Code :
1
2
3
4
5
6
7
8
<?php
  $sql = "select champs_1, champs_2, champs_3
          into outfile 'cheminComplet/nomFichier'
          fields terminated by '\t' optionnaly enclosed by '\"'
          lines terminated by '\r\n'
          from laTable
          where ceQueTuVeux";
?>
2 impératifs :
  • cette option ('into outfile') doit être activée chez l'hébergeur ;
  • le fichier ne doit pas exister, il faut donc éventuellement le détruire avant la requête.
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 14h04   #14
Membre actif
 
Avatar de JmL40
 
Inscription : mai 2007
Messages : 310
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : mai 2007
Messages : 310
Points : 191
Points : 191
Envoyer un message via MSN à JmL40
C'est bon, j'ai trouvé grâce a toi lol, non grâce a ton idée en fait d'une je suis allez voir ma requete et :

- d'une il manquait deux colonnes dans mon select (oublie de ma part :s) donc il manquait deux colonnes pour le fichier texte.

- de deux le formattage de mes données dans ma BD n'est pas bonne en fait toutes les données ne doivent pas contenir d'espace du type DONNEES 1 mais DONNEES_1 donc l'application ne pouvait pas l'executer.

Vos conseils reste tout de même pris en compte pour une optimisation, maintenant à moi de faire plus attention.

Après vous avoir longuement embeter, je vous remercie tous tous !

cordialement
JmL40 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web