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

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    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
    Points : 44 155
    Points
    44 155
    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 régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    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
    Points : 44 155
    Points
    44 155
    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 régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    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
    Points : 44 155
    Points
    44 155
    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

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2004
    Messages
    387
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 387
    Points : 109
    Points
    109
    Par défaut
    Je vas essayer d'être plus clair.
    Fichier brute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    http://www.example.fr/
    http://www.example2.fr/
    http://www.example3.fr/
    Fichier de sortie post traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    url,id,pos,vol
    http://www.example.fr/,1,2,321
    http://www.example2.fr/,2,15,2000
    http://www.example3.fr/,3,1,3000
    Donc mon test est simple, il suffit de vérifié si il y a plusieurs champs (,) sur la première ligne

    d'ou if ((count(explode(",",$a)))<=1)

    Puis ensuite on applique le traitement.

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