Editer fichier csv avec php: recherche/remplacer

arnoweb

WRInaute discret
Bonjour à tous,

J'ai un petit soucis pour traiter un fichier csv avec php

J'aimerais que php fasse un rechercher/remplacer. (recherche dans colonne A et écrit dans colonne B)

Lorsque la colonne nom contient le mot-clé "chemise", php doit modifier la colonne rubrique et écrire 1.
Lorsque la colonne nom contient le mot-clé "costume", php doit modifier la colonne rubrique et écrire 2.
Lorsque la colonne nom contient le mot-clé "cravate", php doit modifier la colonne rubrique et écrire 3.

etc .........

Avez-vous une idée ?

Merci pour votre aide.
 

UsagiYojimbo

WRInaute accro
Tu vas devoir traiter ton fichier ligne par ligne pour ça, en passant notamment par la fonction fgetcsv : http://php.net/manual/fr/function.fgetcsv.php, et en faisant des tests sur les colonnes qui déterminent si tu dois modifier ou non la ligne en cours.

Au fur et à mesure de tes remplacements, tu concatènes la ligne mise à jour (ou non) dans une variable intermédiaire que tu sauvegarde en fin de parcours.
 

arnoweb

WRInaute discret
merci pour ta réponse.

Quand tu dis "ligne par ligne" tu veux dire que je dois utiliser la fonction while ?

Tu pourrais me donner un exemple de code ?

Je ne vois pas comment parcourir mon tableau pour atteindre la colonne à rechercher.
Et je ne vois pas comment écrire dans la colonne qui doit être éditée.

Merci.
 

UsagiYojimbo

WRInaute accro
Il y a sans doute moyen d'optimiser ça, vu que j'ai pondu ça au saut du lit, mais ça semble faire ce que tu attends :

Code:
<?php
$row = 0;
$update = "";
//on stocke en variable le séparateur de csv utilisé
$separator = ";";

//on crée deux variables contenant les index des colonnes à lire / modifier
$idx_nom = 0;
$idx_rubrique = 1;

//on ouvre le fichier en écriture
if (($handle = fopen("test.csv", "r")) !== FALSE) 
{
	
	//on parcours le fichier ligne à ligne, en stockant dans un tableau les donnée
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
    	//on ne commande qu'à la deuxième ligne, su la première contient les entêtes de colonnes
    	if ($row != 0)
    	{
    		//on fait les tests sur le nom 
    		if (stristr($data[$idx_nom], 'chemise'))
    		{
    			$data[$idx_rubrique] = 1;
    		}
  			else if (stristr($data[$idx_nom], 'costume'))
    		{
    			$data[$idx_rubrique] = 2;
    		}
  			else if (stristr($data[$idx_nom], 'cravate'))
    		{
    			$data[$idx_rubrique] = 3;
    		}
		}
		
		$update	.= implode($separator,$data)."\r\n";
		$row++;
	}
    
    fclose($handle);
}

//on ouvre le fichier en ecriture et on le met à jour
$ouvre=fopen("test.csv","w+");
fwrite($ouvre,$update);
fclose($ouvre);
?>
 

Julia41

WRInaute passionné
Je te dirais bien de tout mettre dans MySQL, après tu aurais accès aux commandes REPLACE par exemple.
 

Discussions similaires

Haut