Bonjour,
Je dispose d'un fichier CSV dont voici quelques lignes :
"2012";"vu";;"11843.91";"1145.49";
"2012";"vp";;"12388.03";"1791.23";"68.2"
"2012";"vu";;"25296.55";"4609.22";
"2012";"vp";;"19701.87";"3029.84";
"2012";"vu";;"12816.46";"2429.13";
"2012";"vp";;"14033.35";"1556.17";"200.02"
"2012";"vu";;"7597.83";"6085.31";
"2012";"vp";;"15468.23";"1316.53";"200"
"2012";"vu";;"5894.66";"3145.27";
"2012";"vp";;"11816.4";"2055.98";"770"
...
Il y a, comme vous le voyez, toujours le même nombre de ";" (séparateur de champs), mais le nombre de données peut varier (deux ";" consécutifs quelques fois).
Mon objectif est d'insérer le numéro du mois de façon automatique entre l'année et le champ qui suit, pour ainsi obtenir :
"2012";"01";"vu";;"11843.91";"1145.49";
"2012";"01";"vp";;"12388.03";"1791.23";"68.2"
"2012";"02";"vu";;"25296.55";"4609.22";
"2012";"02";"vp";;"19701.87";"3029.84";
"2012";"03";"vu";;"12816.46";"2429.13";
"2012";"03";"vp";;"14033.35";"1556.17";"200.02"
"2012";"04";"vu";;"7597.83";"6085.31";
"2012";"04";"vp";;"15468.23";"1316.53";"200"
"2012";"05";"vu";;"5894.66";"3145.27";
"2012";"05";"vp";;"11816.4";"2055.98";"770"
...
Il faut donc répéter deux fois le même numéro de mois, puis l'incrémenter. Pour ça je sais faire, mais j'ai un problème avec les fonctions fgets, fputs au niveau des sauts de lignes... cela ne réécrit pas tout (coupure de la ligne suivante) ou alors cela saute trop de lignes... quelqu'un a une idée ?
Voici mon code PHP :
Et voici ce que j'obtiens :
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
19
20
21
22
23
24
25
26
27
28 <?php // ... $adresse_fichier = $adresse_dossier.$fichier; if ($opened_file = fopen($adresse_fichier, 'r+')) { $mois = 1; $incrementer_mois = false; $search = '";"v'; while (($ligne = fgets($opened_file)) !== false) { $replace = '";"'.$mois.'";"v'; $nouvelle_ligne = str_replace($search, $replace, $ligne); if ($incrementer_mois === true) { $mois++; } $incrementer_mois = !$incrementer_mois; if ($mois === 13) { $mois = 1; } $taille_ligne = strlen($ligne); $pos_pointeur = ftell($opened_file) - $taille_ligne; fseek($opened_file, $pos_pointeur); fputs($opened_file, $nouvelle_ligne); } } else { echo 'Le fichier '.$fichier.' n\'a pas pu être ouvert'; } // ... ?>
"2012";"1";"vu";;"11843.91";"1145.49";
2";"1";"vp";;"12388.03";"1791.23";"68.2"
2";"2";"vu";;"25296.55";"4609.22";
2";"2";"vp";;"19701.87";"3029.84";
2";"3";"vu";;"12816.46";"2429.13";
2";"3";"vp";;"14033.35";"1556.17";"200.02"
2";"4";"vu";;"7597.83";"6085.31";
2";"4";"vp";;"15468.23";"1316.53";"200"
2";"5";"vu";;"5894.66";"3145.27";
2";"5";"vp";;"11816.4";"2055.98";"770"
...
Il y a donc 4 caractères du début de chaque ligne qui sont "effacés"... (sauf pour la 1ère ligne où ça fonctionne)
Merci.
Partager