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 :

CSV rajouter l'entete si elle n'exite pas


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut CSV rajouter l'entete si elle n'exite pas
    Bonjour à tous,

    Je traite un fichier Csav dans lequel j'aimerai ajouter l'entete si elle n'existe pas.

    J'ai fait ce bout de code. mais il écrase la première ligne au lieu de s'insére avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while($tab=fgetcsv($fic,1024,';'))
    {
      $champs = count($tab);
      if (($champs==1)&&($ligne<=1)){
            rewind($fic); // On remet le curseur au début du fichier
            $entete = "id,pos,vol\n";
            fputs ($fic, $entete);
            break;
      }
    }
    Ou es mon erreur?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est quoi ta condition pour savoir si l'en-tête existe ou non ?

    Sinon pour le problème, il faut réecrire tout le fichier. Tu ne peux pas insérer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $entete = "id,pos,vol\n";
    file_put_contents('fichier.csv', $entete . file_get_contents('fichier.csv'));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut merci
    Je te remercie

    Effectivement le controle est pas bon, il est extrait d'un fichier plus complet.
    MAis dans cette version se serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((count(explode(",",$a)))<=1)
    Il n'y a auncune de mettre à jour ligne par ligne?
    On est obliger de tout reécrire en une fois?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ligne = 1; // compteur de ligne
    $fic = fopen("file.csv", "r+");
    $result = '';
    while($tab=fgetcsv($fic,1024,';'))
    {
    $entete = "id,pos,vol\n";
      $champs = count($tab);//nombre de champ dans la ligne en question
      echo "<b> Les " . $champs . " champs de la ligne " . $ligne . " sont :</b><br />";
     
      $data = new Myfunction($tab[0]);
        $TT = $data->get_myfunction();
    $result .= $tab[0].",". $TT['id'].",".$TT['pos'].",".$TT['vol']."\n";
    sleep(10);
    if (($ligne%100) == 0)sleep(600);
     
    }
    rewind($fic);
    fputs($fic, $entete.$result);
    J'ai codé cela,
    Mais ce qui m'inquiète est que si la grande boucle bug, je perd tout?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut faire simple : pourquoi ce bazard de rewind ? commence directement le fichier par l'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while($tab=fgetcsv($fic,1024,';'))
    {
    $result = "id,pos,vol\n";
    .....
    }
    fputs($fic, $result);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Par défaut
    Je te remercie, mais l'objectif est d'ajouter l'entete si et seulement si elle n'existe pas déja.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu n'as pas répondu à la question : quel est ton test pour savoir si il existe ou non ?

    De plus l'entête que tu proposes n'a que 3 valeurs alors que pour les autres données tu mets 4 valeurs.

    S'il s'agit seulement de reprendre l'en-tête existant et qu'il commence lui aussi par "id" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($tab=fgetcsv($fic,1024,';'))
    {
      $champs = count($tab);//nombre de champ dans la ligne en question
      echo "<b> Les " . $champs . " champs de la ligne " . $ligne . " sont :</b><br />";
       if ($tab[0] == 'id') {
          $result .= implode(';', $data);
       }
       else {
           $data = new Myfunction($tab[0]);
           $TT = $data->get_myfunction();
           $result .= $tab[0].",". $TT['id'].",".$TT['pos'].",".$TT['vol']."\n";
      }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Créer une procedure si elle n'existe pas.
    Par Chouls dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 10/01/2007, 10h49
  2. [JScrollPane] problème elles ne veulent pas s'activer
    Par Core8 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 16/12/2006, 21h46
  3. Réponses: 5
    Dernier message: 02/05/2006, 09h54
  4. [table]Entete qui ne s'affiche pas
    Par bibx dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/04/2006, 16h36
  5. connexion avec le reseau est-elle etablie ou pas? search api
    Par mehdi_swatch dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2005, 17h54

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