Salut à tous,
voilà mon problème :
j'insère des données issues d'un fichier .csv
tous les champs sont délimités par des ";"
tout marche parfaitement sauflorsque malheureusement dans le fichier d'origine certaines cellules contiennent des ";"
J'ai tout de même remarqué que dans ce cas le champ est mis entre guillemets (" ")
exemple de ligne correcte :
blabla1 ; blabla2 ; blabla3 ; blabla4 ; blabla5 ; blabla6
exemple de ligne non correcte :
blabla1 ; "blabla2;suiteblabla2" ; blabla3 ; blabla4 ; blabla5 ; blabla6
j'ai réussi à résoudre mon problèmeavec le code suivant :
Cependant j'ai un problème si je rencontre plusieurs "mauvais" ";"
Code : 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 $pointVirguleASupprimer = "/(\".*;.*\")/"; while(!feof($csv_ok)) // Tant qu'on est pas à la fin du fichier { $ligne_en_cours = fgets($csv_ok); // On récupère la ligne en cours echo "avant : " .$ligne_en_cours."<br/>"; if(preg_match_all($pointVirguleASupprimer, $ligne_en_cours, $pointVirgule)) { $ligne = preg_split($pointVirguleASupprimer, $ligne_en_cours); for($i=0 ; $i <= count($pointVirgule[0]) -1; $i++) { $ligne = preg_split($pointVirguleASupprimer, $ligne_en_cours); $pointVirgule[0][$i] = str_replace(";", ",", $pointVirgule[0][$i]); $ligne_en_cours = $ligne[0].$pointVirgule[0][$i].$ligne[1]; } echo "apres : " .$ligne_en_cours."<br/>"; } }
comme dans cet exemple :
blabla1 ; "blabla2;suiteblabla2" ; blabla3 ; "blabla4;suiteblabla4" ; blabla5 ; blabla6
car avec le même code j'obtiens ceci :
blabla1 ; "blabla2,suiteblabla2" , blabla3 , "blabla4,suiteblabla4" ; blabla5 ; blabla6
tous les ";" compris entre les extrêmités des guillemets sont remplacés par ","
Merci d'avance pour votre aide
Partager