Comment détecter le séparateur utilisé dans un fichier csv

Publié le 16 Mars 2015

J'ai dû développé en PHP un petit module d'import de fichier csv. La solution que j'ai utilisée se base sur le LOAD DATA INFILE de MySQL.

Un des besoins était de pouvoir utiliser un autre séparateur de champ que la virgule.

J'ai donc écrit une petite fonction qui permet de détecter le séparateur utilisé dans la ligne d'en-tête qui contient les noms des champs présents dans le fichier.

function separator($fields) {
    preg_match_all(
       '/(\w[\p{Pc}\w]*)+\s*([\p{P}\p{S}]+)\s*\w/',     
       $fields, 
       $matches, 
       PREG_SET_ORDER);
    return $matches[0][2];
}

La solution utilise une expression régulière pour détecter les caractères de ponctuation (\p{P}) et symboles (\p{S}) présent après le premier nom de champ. Il devrait donc être assez facile de l'utiliser dans d'autres langages de programmation.

Note: Le nom du premier champ peut contenir des _ (\p{Pc}).

Ensuite il suffit de récupérer les caractères utilisés dans le deuxième groupe (2ème parenthèse).

(La première parenthèse étant le nom du premier champ).

Rédigé par Bliz

Publié dans #Php

Repost 0
Commenter cet article