Bonjour,
mon code lit des fichiers csv et le but est d'en extraire chaque valeur. Or le comportement de mon code diffère selon le délimiteur utilisé dans le fichier csv.
Mon code :
Code php : 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 $data = array_map('str_getcsv', file(DIR_ROOT.$upload_dir.DIRECTORY_SEPARATOR.$name)); /* file(xxx) returns an array where each cell is a line of the file passed into parameter. array_map executes str_getcsv on each cell of the array returned by file. each cell of the array returned by file is a line of the csv file ; str_getcsv puts each elt of the csv file in a cell of an array.*/ if (isset($data)) { //only if array $data exists //one detects the delimitator $Nb_Comas=substr_count($data[0][0], ','); $Nb_Semicolons=substr_count($data[0][0], ';'); if ($Nb_Semicolons > $Nb_Comas) $sep=';'; else $sep=','; $nb_lines_arr=sizeof($data); $val=""; for ($j=1;$j<$nb_lines_arr;$j++) { // for each line of the array $data[$j]=implode($data[$j]); //if several cells in a line, all is concatenated into a unique line $val_split=explode($sep,$data[$j]);//creation of the array $val_split (each cell is a data of the CSV file) var_dump($val_split); } }
Le csv de test initial avait ; comme séparateur et tout allait bien. Ensuite, j'ai testé avec le même csv sauf que le séparateur était une virgule et patatras.
str_getcsv selon la doc analyse une chaîne de caractères représentant des champs au format CSV et retourne un tableau contenant tous les champs lus.
C'est bien le cas si le délimiteur est un ; mais pas si c'est ,
var_dump de la ligne 18
avec ;
avec ,array (size=23)
0 => string 'SESA100008' (length=10)
1 => string '(none)' (length=6)
2 => string 'Software Engineering' (length=20)
3 => string 'SESA69723' (length=9)
4 => string 'CollabNet' (length=9)
5 => string 'TeamForge_Full' (length=14)
6 => string '' (length=0)
7 => string 'TRUE' (length=4)
8 => string 'Jul 26 2018' (length=11)
9 => string '' (length=0)
10 => string '' (length=0)
11 => string 'France' (length=6)
12 => string 'Bilhel' (length=6)
13 => string '---' (length=12)
14 => string 'Schneider Electric France' (length=25)
15 => string 'TYS5' (length=4)
16 => string '' (length=0)
17 => string 'Industry Business' (length=17)
18 => string 'CARROS HORIZON' (length=14)
19 => string '---@schneider-electric.com' (length=42)
20 => string 'Marc' (length=4)
21 => string '---' (length=6)
22 => string '---@schneider-electric.com' (length=34)
Comment faire ? Merci d'avance.array (size=1)
0 => string 'SESA100008(none)Software EngineeringSESA69723CollabNetTeamForge_FullTRUEJul 26 2018FranceBilhel---Schneider Electric FranceTYS5Industry BusinessCARROS HORIZON---@schneider-electric.com---...r-electric.com' (length=253)
Partager