Problème : CSV vers CSV

Petit nouveau ! | 5 Messages

19 mai 2011, 14:48

Bonjour,
j'essaye de réaliser un script qui ouvre un fichier .csv, modifie certaine données récupérées, et les écris dans un 2nd tableau .csv.

Mon problème se situe sur la derniere operation, lors de l'ecriture : Il ecrit les informations sur la meme ligne aulieu de passer a la suivante, et je me retrouve avec la derniere ligne du 1er csv.

Comment faire pour que le fputcsv passe à la ligne suivante du tableau ??


Merci d'avance !!

------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ---
$list = array(array ($id,$data[1],$URL,$data[4],$data[8],$data[7]," etat ", $image, " ean ", $data[9]," categorie "," o "," en stock ", " quantité ","livraison")
);

// ouverture du 2nd csv
if(( $fp = fopen("csv2.csv", "w") ) !==FALSE ) {


foreach ($list as $fields) {

//ecriture des ligne dans le 2nd csv
fputcsv($fp,$fields, ";");


}

}

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2011, 15:06

J'ai testé ton code et je n'ai aucun problème.
PS : si par ligne du tableau tu voulais dire un retour à la ligne dans ton csv tu n'y insères qu'une seule ligne actuellement...

Code que j'ai testé et qui occasionne bien deux lignes :
<?php
$list = array(array ('$id','$data[1]','$URL','$data[4]','$data[8]','$data[7]'," etat ", '$image', " ean ", '$data[9]'," categorie "," o "," en stock ", " quantité ","livraison"),
array ('$id','$data[1]','$URL','$data[4]','$data[8]','$data[7]'," etat ", '$image', " ean ", '$data[9]'," categorie "," o "," en stock ", " quantité ","livraison")
);

// ouverture du 2nd csv
if(( $fp = fopen("csv2.csv", "w") ) !==FALSE ) {
	foreach ($list as $fields) {
		//ecriture des ligne dans le 2nd csv
		fputcsv($fp,$fields, ";");
	}
}
$id;$data[1];$URL;$data[4];$data[8];$data[7];" etat ";$image;" ean ";$data[9];" categorie ";" o ";" en stock ";" quantité ";livraison
$id;$data[1];$URL;$data[4];$data[8];$data[7];" etat ";$image;" ean ";$data[9];" categorie ";" o ";" en stock ";" quantité ";livraison

Petit nouveau ! | 5 Messages

19 mai 2011, 15:29

Merci de repondre aussi vite !

le truc c'est qu'il y a plusieurs ligne dans le 1er fichier csv. , comment faire pour les prendre toutes en compte dans le array ??
Rajouter un array par ligne n'est pas tres pratique...
Comment lui dire de passer a la ligne suivante après chaque ecriture ?

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<?php
$csvtmp="csvtemp";
$csv2="csv2.csv";
$fichier = "C:\wamp\www\extraction.csv";

if (!copy($fichier, $csvtmp)) {
echo "La copie $file du fichier a échoué...\n";
}

$row = 1;
if(( $handle = fopen($csvtmp, "r") ) !==FALSE ) {
while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;

for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}




$list = array(array ($data[0],$data[1],"URL","description",$data[5],$data[7]," etat ", "image", " ean ", $data[9]," categorie "," o "," en stock ", " quantité ","livraison")
);

// ouverture du 2nd csv
if(( $fp = fopen("csv2.csv", "w") ) !==FALSE ) {

//parcour de toute les ligne créé de type $list
foreach ($list as $fields) {

//ecriture des ligne dans le 2nd csv
fputcsv($fp,$fields, ";");

}
}
}
}
fclose($fp);
fclose($handle);

?>

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2011, 16:10

Bah encore faudrait-il lire la ligne suivante avant de tenter d'écrire dans ce cas. #-o

Il te faut construire ton array dans une première boucle qui ne fait que de la lecture.
Ensuite tu fais une boucle pour l'écriture.

Là tu as la boucle d'écriture à l'intérieur de la boucle de lecture.

Petit nouveau ! | 5 Messages

20 mai 2011, 11:03

Ah, C'est bon, j'ai compris mon pb !

je faisait le fopen dans la boucle, il ouvrait donc le fichier a chaque fois et remettait le pointeur au debut du fichier...

merci encore !