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 :

preg_split donne une première dimension de trop


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 578
    Points : 804
    Points
    804
    Par défaut preg_split donne une première dimension de trop
    Bonjour à tous,

    Je réalise une fonction d'importation de fichier d'adresses au format VCF dans lequel je veux séparer les différents contacts.
    Pour séparer les contacts, j'utilise preg_split comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_dump(file_get_contents($_FILES['uplFile']['tmp_name']) ); echo '<br/>';
    $arrItems = preg_split( "/BEGIN ?: ?VCARD\\r?\\n?/is", file_get_contents($_FILES['uplFile']['tmp_name']) );
    var_dump($arrItems);
    J'obtiens une première valeur vide indésirable et je reproduis ici le résultat des var_dump des lignes 1 et 3:
    Code texte : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string(167) "BEGIN:VCARD VERSION:2.1 N;CHARSET=utf-8;ENCODING=QUOTED-PRINTABLE:Infirmieres;Ac;;; TEL;CELL:0612345678 BDAY:00010101 LBDAY:0 ANNI:00010101 LANNI:0 END:VCARD "
     
    array(2) { [0]=> string(0) "" [1]=> string(154) "VERSION:2.1 N;CHARSET=utf-8;ENCODING=QUOTED-PRINTABLE:Infirmieres;Ac;;; TEL;CELL:0612345678 BDAY:00010101 LBDAY:0 ANNI:00010101 LANNI:0 END:VCARD " }

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    C'est normal, la pattern de preg_split n'indique rien d'autre qu'un trait de coupe, donc s'il n'y a rien avant ou après un trait de coupe ou si deux traits de coupe se succèdent, ça génère des chaînes vides.

    Bonne chose à savoir, la fonction preg_split dispose de l'option PREG_SPLIT_NO_EMPTY pour filtrer les chaînes vides.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $parts = preg_split($mapattern, $machaine, -1, PREG_SPLIT_NO_EMPTY);
    Ceci étant, cette option ne prémunit pas des chaînes blanches (avec uniquement des espaces, tabulations, saut de lignes, espaces non-sécables, quadratins, etc.) ou d'autres caractères parasites.

    C'est pourquoi preg_split n'est pas toujours une fonction pratique et dans bien des cas il est plus aisé d'utiliser preg_match_all à la place. Donc au lieu de couper la chaîne, on cherche les morceaux qui nous intéresse, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( preg_match_all('~\bBEGIN\s*:\s*VCARD\s+(.*?)\s*\bEND\s*:\s*VCARD\b~su', $machaine, $matches) ) {
        print_r($matches[1]);
    }
    De plus, preg_match_all permet directement d'aller plus avant dans le traitement (en remplaçant (.*?) par quelque chose de plus élaboré avec des groupes de captures), ce que preg_split ne permet pas.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 578
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 578
    Points : 804
    Points
    804
    Par défaut
    Merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/05/2008, 10h36
  2. Comment donne une couleur a une ligne dans un DBGrid
    Par samy84s dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/09/2005, 23h22
  3. [HTML] Donné une largeur en caractere à une liste.
    Par castaka dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/05/2005, 10h31
  4. Réponses: 6
    Dernier message: 30/09/2004, 12h21
  5. [interbase]Se logger après une première installation
    Par Ultra-FX dans le forum InterBase
    Réponses: 3
    Dernier message: 13/09/2002, 11h44

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