Tratiement CSV en PHP

titus93 Messages postés 2 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,

J'ai besoin de traiter un fichier CSV qui contient plusieurs tableaux, ceux-ci sont séparer par le mot ****_start et ****_end.
Je voudrais pouvoir créer plusieurs fichiers qui contiennent chacun un tableaux appartenant au fichier CSV.

Je voudrais utilisé du PHP pour le faire.

Quelqu'un peut-il m'aider.

1 réponse

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    voilà une solution:
    <?php
    //si ton fichier est de la forme
    /*
    xxxx_start
    blabla
    ....
    ....
    yyyy_fin
    zzzzz_start
    bolobolo
    .....
    ...
    ....
    wwww_fin
    */
    //attention il faut mettre ici le chemin relatif par rapport à ce script
    $nom_fichier='./tonfichier.csv';
    //on lit tout le fichier par file qui met dans un array ligne par ligne
    if(is_file($nom_fichier)){
    	$array_fichier = file($nom_fichier);
    	//parcours de l'array pour detecter les tags de debut et fin
    	$num_fich=0;
    	$num_ligne_start=0;
    	$num_ligne_end=-1;
    	$array_resultat=array();
    	foreach($array_fichier as $num_ligne=>$contenu_ligne){
    		
    		//detection tag debut
    		if(preg_match("#[A-Za-z0-9]_start#",$contenu_ligne)){
    			$num_ligne_start=$num_ligne;
    			//changement numéro de fichier
    			if($num_ligne_start > $num_ligne_end){
    				$num_fich ++;
    			}
    		}
    		
    		//detection tag fin
    		if(preg_match("#[A-Za-z0-9]_end#",$contenu_ligne)){
    			$num_ligne_end=$num_ligne;
    			
    		}
    	
    		//empilage dans l'array a deux dimensions sauf les lignes contenant les tags debut et fin
    		if($num_ligne != $num_ligne_start && $num_ligne != $num_ligne_end){
    			$array_resultat[$num_fich][]= $contenu_ligne;
    		}
    		
    	}
    	
    	//on se retrouve avec un array a 2 dimensions dont la premiere est le numéro de fichiers et la deuxième leur contenu 
    	//parcours premiere dimension
    	$cpt_fich=0;
    	foreach($array_resultat as $num_fichier=>$array_contenu_fichier){
    		//on ouvre le fichier, si n'existe( c'est notre cas) pas on le crée 
    		//tu peux mettre le nom que tu veux 
    		//attention il faut mettre ici aussi le chemin relatif par rapport à ce script et que le répertoire qui le contiendra soit en chmod 777
    		$cpt_fich ++;
    		
    		$f=fopen("./fichier_result_".$num_fichier,"w+"); 
    		
    		//parcours deuxieme dimension
    		foreach($array_contenu_fichier as $key=>$ligne){
    			//ecriture contenu ligne
    			fputs($f,$ligne); 
    		}
    		fclose($f); //fermeture fichier
    	
    	}
    	 echo "<br />".$cpt_fich." fichiers ont été crées";
    
    }else{
    	echo 'Fichier '.$nom_fichier.' non trouvé, revoir le nom ou le chemin relatif de ce fichier par rapport a ce script php ';
    }
    ?>
    0