IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problèmes Ecriture dans Fichiers Texte


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé Avatar de Inazo
    Profil pro
    Gérant - société de développement web
    Inscrit en
    Avril 2007
    Messages
    417
    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 : 417
    Points : 632
    Points
    632
    Par défaut
    Bonjour à toi,

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

    Cordialement Inazo.

  3. #3
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fclose($myfile); 
    chmod ("C:\Program Files\Gen_LABO\Hybrides.txt", 0777);
    MERCI

    PS : EDIT des deux posts désolé

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnee = $data["$write[$i]"];
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnee = $data[$write[$i]];

  5. #5
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      while ($data = mysql_fetch_array($req))
      {
        $ligne = implode("\t", $data) . "\r\n";
        fwrite($myfile, $ligne);
      }
      fclose($myfile);

  7. #7
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Bonjour,

    Merci attend je test !


  8. #8
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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 !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Citation Envoyé par JmL40 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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,

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 45
    Points : 49
    Points
    49
    Par défaut
    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.

  11. #11
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Dans ce cas, tu modifie ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select leChamp1QueTuVeux, leChamp2QueTuVeux, etc.
    D'autre part, il faut modifier cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while ($data = mysql_fetch_array($req))
    comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      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.

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Un exemple avec le lien que je t'ai donné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème Ecriture dans fichier .txt
    Par Patatattak dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/07/2011, 20h02
  2. Réponses: 14
    Dernier message: 22/05/2011, 12h21
  3. [bug] ecriture dans fichier texte
    Par skaraa dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/11/2007, 15h14
  4. ecriture dans fichier texte
    Par nicofan dans le forum C++
    Réponses: 1
    Dernier message: 28/09/2007, 13h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo