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 :

En-tête dans fichier CSV


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut En-tête dans fichier CSV
    Bonjour
    je souhaiterai insérer une ligne à un certain nombre de lignes tout en récupérant la valeur d'un champ de la ligne suivante (basé sur les premiers caractères), uniquement si celui-ci change, exemple :

    de base toutes les 5 lignes, sauf pour le dernier cas, vu que le champ récupéré ne change pas, je recule l'insertion de l'en-tête
    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
    Entete;type;100001;date
    Ligne;champ1;champ2;100001
    Ligne;champ1;champ2;100002
    Ligne;champ1;champ2;100003
    Ligne;champ1;champ2;100004
    Ligne;champ1;champ2;100005
    Entete;type;200001;date
    Ligne;champ1;champ2;200001
    Ligne;champ1;champ2;200002
    Ligne;champ1;champ2;200003
    Ligne;champ1;champ2;200004
    Ligne;champ1;champ2;200005
    Ligne;champ1;champ2;200006
    Ligne;champ1;champ2;200007
    Entete;type;300001;date
    Ligne;champ1;champ2;300001
    j'arrive actuellement à générer mes lignes et à insérer un en-tête uniquement en début de fichier (dans une boucle while)
    j'utilise également fopen, fwrite, fclose pour créer le fichier suivant ma boucle

    auriez-vous une idée svp
    merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    je n'ai pas compris votre exemple, quelle valeur ne change pas et déclenche le décalage de l'entête ?

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    bonjour
    la valeur du chiffre, dans mon exemple, quand je passe de 100001 à 200001, je met l'entête, mais ce n'est pas systématique, il faut quand même que je compte un certain nombre de lignes (5 lignes dans mon exemple)
    donc, entre 200001 et 300001, il y a 6 lignes, j'ai décalé l'insertion de l'en-tête.

    par contre, si j'avais eu :
    200001
    200002
    300001
    300002
    400001
    je insérerai un entête qu'au moment où je passe sur 400001 (pas à 300001)
    merci

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    j'ai compris, il s'agit du premier caractère de la données qui n'a pas changé.
    et quand vous marquez "Ligne" dans l'exemple, il s'agit du numéro de ligne ou bien d'une données quelconque ?

    une précision au sujet du format, il ne s'agit pas de CSV puisque le format CSV a seulement un entête sur la 1re ligne. donc les lecteur classique de fichier CSV ne pourront pas décoder correctement vos données et vous aurez besoin d'un lecteur personnalisé.

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    et quand vous marquez "Ligne" dans l'exemple, il s'agit du numéro de ligne ou bien d'une données quelconque ?
    une donnée quelconque, c'était pour marqué la séparation dans l'exemple

    une précision au sujet du format, il ne s'agit pas de CSV puisque le format CSV a seulement un entête sur la 1re ligne. donc les lecteur classique de fichier CSV ne pourront pas décoder correctement vos données et vous aurez besoin d'un lecteur personnalisé.
    pas de soucis là dessus, j'ai l'interpréteur de ce type de fichier

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous pouvez garder la valeur du caractère précédent dans une variable et donc en faisant une boucle, vous pouvez essayer cela

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    $donnees = [
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "20001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "20002"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "20003"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "30001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "30001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "40001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "40001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50001"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50002"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50003"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50004"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50005"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50006"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "50007"],
    	["d1" => "aaa", "d2" => "bbbb", "d3" => "60007"],
    ];
     
     
    $resultat = [];
     
     
    $caracterePrecedent = NULL;
    $compteur = 0;
     
     
    foreach ($donnees as $ligneDonnee) {
     
    	$compteur++;
     
    	$premierCaractere = substr($ligneDonnee["d3"], 0, 1);
     
     
    	if (	$compteur > 5
    		&&	($premierCaractere !== $caracterePrecedent)
    	) {
     
    		$compteur = 0;
     
    		// ajout d'un entête
    		$resultat[] = "Entete;type;{$ligneDonnee["d3"]};date";
     
    	}
     
    	$resultat[] = "{$ligneDonnee["d1"]};{$ligneDonnee["d2"]};{$ligneDonnee["d3"]}";
     
    	$caracterePrecedent = $premierCaractere;
     
    }
     
     
    $contenu = implode("\n", $resultat);
     
     
    /*
     
    $contenu contient : 
     
    aaa;bbbb;20001
    aaa;bbbb;20002
    aaa;bbbb;20003
    aaa;bbbb;30001
    aaa;bbbb;30001
    Entete;type;40001;date
    aaa;bbbb;40001
    aaa;bbbb;40001
    aaa;bbbb;50001
    aaa;bbbb;50002
    aaa;bbbb;50003
    aaa;bbbb;50004
    aaa;bbbb;50005
    aaa;bbbb;50006
    aaa;bbbb;50007
    Entete;type;60007;date
    aaa;bbbb;60007
     
     
    */

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Au passage, même si ce n'est pas un fichier CSV proprement dit, ça reste un format CSV. Tu peux donc utiliser fputcsv pour écrire ton fichier à partir du tableau de données (plutôt que construire la ligne à la main)

    Donc en reprenant l'exemple de mathieu :
    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
    19
    20
    21
    22
    23
    24
    $fp = fopen('file.csv', 'w'); 
     
    $caracterePrecedent = NULL;
    $compteur = 0;
     
    foreach ($donnees as $ligneDonnee) {
    	$compteur++;
     
    	$premierCaractere = substr($ligneDonnee["d3"], 0, 1);
     
    	if (	$compteur > 5
    		&&	($premierCaractere !== $caracterePrecedent)
    	) {
     
    		$compteur = 0;
     
    		// ajout d'un entête
            $entete = ["Entete","type",$ligneDonnee["d3"],"date"];
            fputcsv($fp, $entete, ';');
    	}
        fputcsv($fp, $ligneDonnee, ';');
    }
     
    fclose($fp);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur
    Inscrit en
    Février 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    je vais essayer, merci de vos réponses

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/02/2008, 11h11
  2. grands nombre dans fichiers csv xls
    Par laurent.c123 dans le forum Documents
    Réponses: 3
    Dernier message: 09/07/2007, 22h28
  3. Problème de séparateur dans fichier CSV
    Par mbibim63 dans le forum Excel
    Réponses: 4
    Dernier message: 05/07/2007, 08h29
  4. Recherche dans fichier CSV
    Par psal78 dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 02/05/2007, 07h48
  5. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36

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