Bonsoir,
j'ai un souci pour déterminer le header d'un fichier CSV.
Début du fichier CSV (édité avec Notepad++) :
traitement pour obtenir le header :"SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL""";
"SESA1000,""(none)"",""Software Engineering"",""SESA84441"",""Atlassian"",""JIRA Global Instance"","""",""True"",""Jan 01, 2021"","""","""",""Spain"",""Miguel"",""Abad"",""SCHNEIDER ELECTRIC ESPANA, S.A.U."",""FKP8"","""",""Global Finance"",""BARCELONA (BAC DE RODA)"",""adresse.mail@se.com"",""Alistair"",""Mckelvie"",""manager.adresse.mail@se.com""";
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
21 rewind(self::$handle);//pointer au début du fichier if (false !== $line = fgets(self::$handle,4096)) { $line = preg_replace('~^\N{U+FEFF}~u', '', $line); //retirer le BOM $char = mb_substr($line, 0, 1); // premier caractère if ($char == '"') { $line = rtrim($line); $line = substr($line,1, -1); $line = str_replace('""', '"', $line); $line = str_replace('"""', '"', $line); $separator = ","; } else $separator = ";"; $enclosure = '"'; $header = str_getcsv($line, $separator, $enclosure); }
Ligne lue avant le traitement (vue en debug pas à pas avec PHPSTORM) :Ligne après le traitement :"SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL""";\r\nOn voit que les lignes 8, 9 et 10 ont bien joué leur rôle, sauf au niveau du dernier élément de la ligne : ""MANAGEREMAIL""".SESAID,"ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE","GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE","REPORTINGENTITY",
"BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"""
Après le code des ligne 8 et 9, on a ""MANAGEREMAIL""" ce qui semble correct : le \r\n a été supprimé par la ligne 8 et le point-virgule a été supprimé par la ligne 9.
Par contre après l'exécution des lignes 10 et 11, on a "MANAGEREMAIL""". Donc la ligne 10 a bien remplacé le "" par " partout sauf à la fin de la ligne mais n'a pas touché au """ alors que j'aurais compris si on avait eu "" mais en admettant que ça ne se fasse pas, la ligne 11 aurait bien du remplacer """ par " . Que nenni. Comment faire , SVP ?
Partager