par
Sylvie » 15 avr. 2008, 14:17
J'ai réussi à parsé mon fichier excel à l'aide de cette fonction.Qui m'a l'air plus juste.fgetcsv m'énervait.
<?p
class CSVFile implements Iterator {
private $data;
public function __construct($data,$separator = ',',$isFile=true) {
if ($isFile) {
$data = @file_get_contents($data);
if ($data === false) {
throw new Exception('File does not exists');
}
}
$this->data = $this->parseFile($data,$separator);
}
private function parseFile($content,$separator) {
$data = array();
for($tok = strtok($content,"\r\n"); $tok !== false; $tok = strtok("\r\n")) {
$data[] = explode($separator,$tok);
}
return $data;
}
function current () {
return current($this->data);
}
function key () {
return key($this->data);
}
function next () {
next($this->data);
}
{
reset($this->data);
}
function valid () {
return $this->key() !== null;
}
}
?>
J'obtiens ceci:
Code : Tout sélectionner
Array ( [0] => ;Date;;Client;Mission;Tech.;Catégorie;Facturé;Total H.T.;Article 1;;;;;;Article 2;;;;;;Article 3;;;;;;Article 4;;;;;;Article 5;;;;;;Article 6;;;;;;Article 7;;;;;;Article 8;;;;;;Article 9;;;;;;Article 10;;;;;;Article 11;;;;;;Article 12;;;;;;
[2] => ;01/02/2008;00000;Activlan;39479001;ADM03;Site;; ;INT-AUDIT;AUDIT GRATUIT NOUVEAUX CLIENTS -ATELIER-heure-;2,00; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ;
[3] => ;01/02/2008;00000;Activlan;39479007;TEC05;Atelier;x; ;INT-TEC;ADMINISTRATION-TECHNIQUE INTERNE ACTIVLAN-heure-;2,00; ; ; ;NOTE;Finalisation PB poste Nextira VL410;1,00; ; ; ;INT-TEC;ADMINISTRATION-TECHNIQUE INTERNE ACTIVLAN-heure-;0,20; ; ; ;NOTE;Contact TPB recuperation PC PORT;1,00; ; ; ;INT-RGT;RANGEMENT ACTIVLAN-heure-;3,50; ; ; ;NOTE;"Salle ""Matra""(GB.) et tri matos atelier";1,00; ; ; ;INT-RGT;RANGEMENT ACTIVLAN-heure-;1,00; ; ; ;NOTE;"Livraison Cartons ""matra"" SR.";1,00; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ;
Maintenant je veux séparé ce contenu car le corps que je vais réutilisé est séparé à chaque fois par un ; et les différents articles par ;;;;;.J'utilise ce code pour continué le parsage:
<?p
$articles=explode(";;;;", $data);
foreach ($articles as $article)
{
//Récup des données réutilisables
list($str, $re) = explode(";", $line);
printr($re);
printr($str);
?>
Mais ca ne fonctionne pas.Pourquoi?Help please!
J'ai réussi à parsé mon fichier excel à l'aide de cette fonction.Qui m'a l'air plus juste.fgetcsv m'énervait.
[php]
<?p
class CSVFile implements Iterator {
private $data;
public function __construct($data,$separator = ',',$isFile=true) {
if ($isFile) {
$data = @file_get_contents($data);
if ($data === false) {
throw new Exception('File does not exists');
}
}
$this->data = $this->parseFile($data,$separator);
}
private function parseFile($content,$separator) {
$data = array();
for($tok = strtok($content,"\r\n"); $tok !== false; $tok = strtok("\r\n")) {
$data[] = explode($separator,$tok);
}
return $data;
}
function current () {
return current($this->data);
}
function key () {
return key($this->data);
}
function next () {
next($this->data);
}
{
reset($this->data);
}
function valid () {
return $this->key() !== null;
}
}
?>[/php]
J'obtiens ceci:
[code]Array ( [0] => ;Date;;Client;Mission;Tech.;Catégorie;Facturé;Total H.T.;Article 1;;;;;;Article 2;;;;;;Article 3;;;;;;Article 4;;;;;;Article 5;;;;;;Article 6;;;;;;Article 7;;;;;;Article 8;;;;;;Article 9;;;;;;Article 10;;;;;;Article 11;;;;;;Article 12;;;;;;
[2] => ;01/02/2008;00000;Activlan;39479001;ADM03;Site;; ;INT-AUDIT;AUDIT GRATUIT NOUVEAUX CLIENTS -ATELIER-heure-;2,00; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ;
[3] => ;01/02/2008;00000;Activlan;39479007;TEC05;Atelier;x; ;INT-TEC;ADMINISTRATION-TECHNIQUE INTERNE ACTIVLAN-heure-;2,00; ; ; ;NOTE;Finalisation PB poste Nextira VL410;1,00; ; ; ;INT-TEC;ADMINISTRATION-TECHNIQUE INTERNE ACTIVLAN-heure-;0,20; ; ; ;NOTE;Contact TPB recuperation PC PORT;1,00; ; ; ;INT-RGT;RANGEMENT ACTIVLAN-heure-;3,50; ; ; ;NOTE;"Salle ""Matra""(GB.) et tri matos atelier";1,00; ; ; ;INT-RGT;RANGEMENT ACTIVLAN-heure-;1,00; ; ; ;NOTE;"Livraison Cartons ""matra"" SR.";1,00; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ; ;; ; ; ; ;[/code]
Maintenant je veux séparé ce contenu car le corps que je vais réutilisé est séparé à chaque fois par un ; et les différents articles par ;;;;;.J'utilise ce code pour continué le parsage:
[php]<?p
$articles=explode(";;;;", $data);
foreach ($articles as $article)
{
//Récup des données réutilisables
list($str, $re) = explode(";", $line);
printr($re);
printr($str);
?>[/php]Mais ca ne fonctionne pas.Pourquoi?Help please!