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 :

Lecture fichier .csv issu d'Excel dans script PHP


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut Lecture fichier .csv issu d'Excel dans script PHP
    Bonjour,

    Sous Excel Windows, j'enregistre un fichier Excel en .csv.

    Mon script PHP ne lit que la première ligne.

    Je ré-enregistre le même fichier avec un MacIntosh.

    Mon script PHP le traite complétement.

    Que dois-je changer dans mon script ou dans Excel Windows pour que le .csv sous Windows soit :lisible ?

    Merci d'avance.

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Peux-tu poster le code ? Est-ce que tu utilises la fonction fgetcsv ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Voilà la fonction qui transforme le fichier .csv en array PHP.

    C'est simple, il faut croire que "\r" convient pour les retours à la ligne Mac mais pas Windows.
    Je suppose qu'il faudrait "\n" pour Windows mais je n'en suis pas sûr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function CSV2Array ($openFile, $columnsOnly = false)
    {
    $handle = fopen ($openFile,"r");
    $rows = 0;
    while (!feof ($handle))
    {
    $columns[] = explode ("\r", fgets ($handle));
    if ($rows++ == 0 && $columnsOnly) break;
    }
    fclose ($handle);
    return $columns;
    }

  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
    Contrôle avec un editeur de texte quels caractères tu as en fin de ligne.

    Tu peux aussi utiliser fgetcsv
    http://php.net/manual/fr/function.fgetcsv.php

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Citation Envoyé par sabotage Voir le message
    Contrôle avec un editeur de texte quels caractères tu as en fin de ligne.
    Je ne comprends pas.
    Si j'ouvre avec bloc note ou notepad++ je ne vois pas les caractères de fin de ligne.
    Je sais que c'est dos/windows, c'est tout.

    Citation Envoyé par sabotage Voir le message
    Tu peux aussi utiliser fgetcsv
    http://php.net/manual/fr/function.fgetcsv.php
    Ok, mais l'objectif de ma fonction n'est de structurer le fichier .csv dans un tableau mais juste de récupérer chaque ligne dans un tableau.

    la ligne peut être :

    a
    ou
    a;b;c
    ou
    a;b;;;c;d;;f

    C'est le script qui appelle la fonction qui se charge du traitement de chaque ligne.

    Donc avec fgetcsv je dois modifier tous les scripts qui appellent cette fonction.
    En plus il me semble que je devrais utiliser :

    ini_set('auto_detect_line_endings',TRUE);

    Et comme je suis sur un Mutu je ne sais pas si je peux.

    Mon idée est plutôt de détecter la fin de ligne dans la fonction actuelle.

    Savez-vous quel est le retour à la ligne pour dos/windows ?

    Visiblement "\r" ne fonctionne que pour Mac.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Pardon.

    Avec Notepad++
    Affichage > Symboles spéciaux > Afficher les symboles de fin de ligne.

    CRLF

  7. #7
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par boteha Voir le message
    Bonjour,
    ....
    Donc avec fgetcsv je dois modifier tous les scripts qui appellent cette fonction.
    ....
    fgetcsv retourne un tableau.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Citation Envoyé par badaze Voir le message
    fgetcsv retourne un tableau.
    Oui, justement, un tableau complet, alors que je veux juste les lignes.

    Si le .csv est :
    a
    a;b;c
    a;b;;;c;d;;f

    Je veux juste avoir le tableau des lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab = array ([0] => 'a', [1] => 'a;b;c', [2] => 'a;b;;;c;d;;f');

  9. #9
    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 la fonction file() alors qu'il te faut :
    http://php.net/manual/fr/function.file.php

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    C'est la fonction file() alors qu'il te faut :
    Ok, j'essaye pendant le week-end et je vous tiens au courant.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 685
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Selon mes tests la fonction file () semble bien adaptée.

    Ensuite, si le ficher est de type .csv je fait un explode avec ';'.
    Et si .txt, exploide avec "\t"

Discussions similaires

  1. [XL-2013] Créer un fichier CSV pour importation contacts dans Outlook
    Par lety 't be dans le forum Excel
    Réponses: 4
    Dernier message: 23/12/2019, 18h49
  2. Réponses: 2
    Dernier message: 31/07/2014, 15h45
  3. Lecture ligne par ligne fichier texte issu d'excel
    Par LinuxUser dans le forum C++
    Réponses: 0
    Dernier message: 14/02/2013, 09h52
  4. lecture fichier plat TXT sans espace dans excel
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/06/2011, 18h31
  5. [MySQL] Lecture fichier CSV et enregistrement dans la base
    Par tifsa dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 26/09/2008, 12h49

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